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
|
定义于头文件
<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) | ( 仅用于说明* ) |
计算迭代器的关联类型。
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 。
T
的
引用类型
。
T
的
常量引用类型
。
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 。
T
的
右值引用类型
。当且仅当表达式
ranges::
iter_move
(
std::
declval
<
T
&
>
(
)
)
有效且具有可引用类型时,此别名模板的约束条件才被满足。
T
的
公共引用类型
。这是其引用类型与其值类型的左值引用之间的公共引用类型。
indirect-value-t
表示以下含义:
-
若
T与 std :: projected < I, Proj > 类型相同(对于某些类型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++23)
(C++20)
(C++20)
|
获取范围的引用类型
(别名模板) |
|
(C++20)
(C++20)
(C++20)
|
获取范围的大小、差值和值类型
(别名模板) |