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 = /* 见下文 */; |
(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 = /* 见下文 */; |
(4) | (C++20 起) |
template< /*dereferenceable*/ T> requires /* 见下文 */ |
(5) | (C++20 起) |
template< std::indirectly_readable T > using iter_common_reference_t = |
(6) | (C++20 起) |
辅助模板 |
||
template< class T > concept /*dereferenceable*/ = /* 见下文 */; |
(7) | (仅用于阐述*) |
template< std::indirectly_readable T > using /*indirect-value-t*/ = /* 见下文 */; |
(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
的 const 引用类型。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
:
- 当
T
等同于对于某个类型I
和Proj
的 std::projected<I, Proj> 时,代表 std::invoke_result_t<Proj&, /*indirect-value-t*/<I>>。 - 否则,代表 std::iter_value_t<T>&。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
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) |
取得范围的大小类型、差类型和值类型 (别名模板) |
取得范围的引用类型 (别名模板) |