std::ranges::iter_move
來自 cppreference.com
< cpp | 迭代器 (iterator)
定義於標頭檔案 <iterator> |
||
inline namespace /* 未指定 */ { inline constexpr /* 未指定 */ iter_move = /* 未指定 */; |
(C++20 起) (定製點物件) |
|
呼叫簽名 (Call signature) |
||
template< class T > requires /* 見下文 */ |
(C++20 起) | |
從給定迭代器獲取右值引用或純右值臨時物件。
ranges::iter_move(t) 在表示式等價於
- iter_move(t),如果 t 具有類或列舉型別,並且當該表示式被視為未求值運算元時格式良好,其中
iter_move
的過載決議僅使用透過實參依賴查詢找到的候選函式。 - 否則,如果 *t 格式良好且是左值,則為 std::move(*t)。
- 否則,如果 *t 格式良好且是右值,則為 *t。
在所有其他情況下,對 ranges::iter_move
的呼叫是格式錯誤的,這可能導致當 ranges::iter_move(e) 出現在模板例項化的直接上下文中時發生替換失敗。
如果 ranges::iter_move(e) 不等於 *e,則程式格式錯誤,不需要診斷。
自定義點物件
名稱 ranges::iter_move
表示一個自定義點物件,它是字面量semiregular
類型別的 const 函式物件。為了說明目的,其型別的不帶 cv 限定符的版本表示為 __iter_move_fn
。
__iter_move_fn
的所有例項都相等。在相同實參上呼叫 __iter_move_fn
型別的不同例項的效果是等價的,無論表示例項的表示式是左值還是右值,以及是否帶有 const 限定符(然而,帶有 volatile 限定符的例項不要求可呼叫)。因此,ranges::iter_move
可以自由複製,並且其副本可以互換使用。
給定一組型別 Args...
,如果 std::declval<Args>()... 滿足上述 ranges::iter_move
的實參要求,則 __iter_move_fn
遵循
- std::invocable<__iter_move_fn, Args...>,
- std::invocable<const __iter_move_fn, Args...>,
- std::invocable<__iter_move_fn&, Args...> 和
- std::invocable<const __iter_move_fn&, Args...>.
否則,__iter_move_fn
的任何函式呼叫運算子都不參與過載決議。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 另見
(C++20) |
將解引用後的底層迭代器的結果轉換為其關聯的右值引用型別 (函式) |
(C++20) |
將底層迭代器解引用的結果轉換為其關聯的右值引用型別 (函式) |