名稱空間
變體
操作

std::ranges::iter_move

來自 cppreference.com
 
 
迭代器庫
迭代器概念
迭代器原語
演算法概念與工具
間接可呼叫概念
常用演算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器介面卡
迭代器定製點
ranges::iter_move
(C++20)
範圍訪問
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
定義於標頭檔案 <iterator>
inline namespace /* 未指定 */ {

    inline constexpr /* 未指定 */ iter_move = /* 未指定 */;

}
(C++20 起)
(定製點物件)
呼叫簽名 (Call signature)
template< class T >

    requires /* 見下文 */

constexpr decltype(auto) iter_move( T&& t ) noexcept(/* 見下文 */);
(C++20 起)

從給定迭代器獲取右值引用或純右值臨時物件。

ranges::iter_move(t)表示式等價

  1. iter_move(t),如果 t 具有類或列舉型別,並且當該表示式被視為未求值運算元時格式良好,其中 iter_move過載決議僅使用透過實參依賴查詢找到的候選函式。
  2. 否則,如果 *t 格式良好且是左值,則為 std::move(*t)
  3. 否則,如果 *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 遵循

否則,__iter_move_fn 的任何函式呼叫運算子都不參與過載決議。

[編輯] 示例

[編輯] 另見

(C++20)
將解引用後的底層迭代器的結果轉換為其關聯的右值引用型別
(函式) [編輯]
(C++20)
將底層迭代器解引用的結果轉換為其關聯的右值引用型別
(函式) [編輯]