std::iter_value_t, std::iter_reference_t, std::iter_const_reference_t, std::iter_difference_t, std::iter_rvalue_reference_t, std::iter_common_reference_t
來自 cppreference.com
< cpp | 迭代器 (iterator)
定義於標頭檔案 <iterator> |
||
template< class T > using iter_value_t = /* 見下文 */; |
(1) | (C++20 起) |
template< /*可解引用*/ T > using iter_reference_t = decltype(*std::declval<T&>()); |
(2) | (C++20 起) |
template< std::indirectly_readable T > using iter_const_reference_t = |
(3) | (C++23 起) |
template< class T > using iter_difference_t = /* 見下文 */; |
(4) | (C++20 起) |
template< /*可解引用*/ T> requires /* 見下文 */ |
(5) | (C++20 起) |
template< std::indirectly_readable T > using iter_common_reference_t = |
(6) | (C++20 起) |
幫助模板 |
||
template< class T > concept /*可解引用*/ = /* 見下文 */; |
(7) | (僅作說明*) |
template< std::indirectly_readable T > using /*間接值型別*/ = /* 見下文 */; |
(8) | (僅作說明*) |
計算迭代器的關聯型別。
1) 計算
T
的值型別。- 如果 std::iterator_traits<std::remove_cvref_t<T>> 未特化,則 std::iter_value_t<T> 是 std::indirectly_readable_traits<std::remove_cvref_t<T>>::value_type。
- 否則,它是 std::iterator_traits<std::remove_cvref_t<T>>::value_type。
2) 計算
T
的引用型別。3) 計算
T
的常量引用型別。4) 計算
T
的差值型別。- 如果 std::iterator_traits<std::remove_cvref_t<T>> 未特化,則 std::iter_difference_t<T> 是 std::incrementable_traits<std::remove_cvref_t<T>>::difference_type。
- 否則,它是 std::iterator_traits<std::remove_cvref_t<T>>::difference_type。
6) 計算
T
的共同引用型別。這是其引用型別與其值型別的左值引用之間的共同引用型別。8) 僅用於解釋的別名模板
indirect-value-t
表示以下內容:- std::invoke_result_t<Proj&, /*間接值型別*/<I>> 如果
T
與 std::projected<I, Proj> 相同,其中I
和Proj
是某些型別。 - 否則,為 std::iter_value_t<T>&。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
P2609R3 | C++20 | std::iter_common_reference_t 曾以std::iter_value_t<T>& 的形式定義,這錯誤地處理了 std::projected 型別,這些型別會投影為右值引用型別 |
已根據 /*間接值型別*/<T> 進行定義以處理此類情況。 |
[編輯] 參閱
(C++20) |
透過應用運算子* 指定型別是間接可讀的(概念) |
(C++20) |
指定一個semiregular 型別可以使用前置和後置增量運算子進行增量操作(概念) |
計算indirectly_readable 型別的值型別(類模板) | |
(C++20) |
計算weakly_incrementable 型別的差值型別(類模板) |
提供迭代器屬性的統一介面 (類模板) | |
獲取範圍的迭代器和哨兵型別 (別名模板) | |
獲取範圍的引用型別 (別名模板) | |
獲取範圍的大小、差值和值型別 (別名模板) |