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
在头文件 <iterator> 中定义 |
||
template< class T > using iter_value_t = /* see below */; |
(1) | (自 C++20 起) |
template< /*dereferenceable*/ 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 = /* see below */; |
(4) | (自 C++20 起) |
template< /*dereferenceable*/ T> requires /* see below */ |
(5) | (自 C++20 起) |
template< std::indirectly_readable T > using iter_common_reference_t = |
(6) | (自 C++20 起) |
辅助模板 |
||
template< class T > concept /*dereferenceable*/ = /* see below */; |
(7) | (仅供说明*) |
template< std::indirectly_readable T > using /*indirect-value-t*/ = /* see below */; |
(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&, /*indirect-value-t*/<I>> 如果
T
与 std::projected<I, Proj> 相同,对于某些类型I
和Proj
。 - 否则,std::iter_value_t<T>&.
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
P2609R3 | C++20 | std::iter_common_reference_t 是根据的 std::iter_value_t<T>& 定义的,它错误地处理了 std::projected 类型,这些类型投影到右值引用类型 |
根据 /*indirect-value-t*/<T> 定义以处理此类情况 |
[编辑] 另请参见
(C++20) |
指定通过应用运算符 * 来间接读取类型(概念) |
(C++20) |
指定 semiregular 类型可以通过前缀和后缀递增运算符递增(概念) |
(C++20) |
计算 indirectly_readable 类型的值类型(类模板) |
(C++20) |
计算 weakly_incrementable 类型的差值类型(类模板) |
提供对迭代器属性的统一接口 (类模板) | |
(C++20)(C++23)(C++20)(C++23) |
获取范围的迭代器和哨兵类型 (别名模板) |
获取范围的引用类型 (别名模板) | |
(C++20)(C++20)(C++20) |
获取范围的大小、差值和值类型 (别名模板) |