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.cn
< 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类型的差值类型(类模板) |
| 提供迭代器属性的统一接口 (类模板) | |
| 获取范围的迭代器和哨兵类型 (别名模板) | |
| 获取范围的引用类型 (别名模板) | |
| 获取范围的大小、差值和值类型 (别名模板) |