Namespaces
Variants

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

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
iter_value_t iter_difference_t iter_reference_t iter_const_reference_t iter_rvalue_reference_t iter_common_reference_t
(C++20) (C++20) (C++20) (C++23) (C++20) (C++20)
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定义于头文件 <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 =
std:: common_reference_t < const std :: iter_value_t < T > && ,

std :: iter_reference_t < T >> ;
(3) (C++23 起)
template < class T >
using iter_difference_t = /* 见下文 */ ;
(4) (C++20 起)
template < /*dereferenceable*/ T >

requires /* 见下文 */
using iter_rvalue_reference_t =

decltype ( ranges:: iter_move ( std:: declval < T & > ( ) ) ) ;
(5) (C++20 起)
template < std:: indirectly_readable T >

using iter_common_reference_t =
std:: common_reference_t < std :: iter_reference_t < T > ,

/*indirect-value-t*/ < T >> ;
(6) (C++20 起)
辅助模板
template < class T >
concept /*dereferenceable*/ = /* 见下文 */ ;
(7) ( 仅用于说明* )
template < std:: indirectly_readable T >
using /*indirect-value-t*/ = /* 见下文 */ ;
(8) ( 仅用于说明* )

计算迭代器的关联类型。

1) 计算 T 值类型
2) 计算 T 引用类型
3) 计算 T 常量引用类型
4) 计算 T 差值类型
5) 计算 T 右值引用类型 。当且仅当表达式 ranges:: iter_move ( std:: declval < T & > ( ) ) 有效且具有可引用类型时,此别名模板的约束条件才被满足。
6) 计算 T 公共引用类型 。这是其引用类型与其值类型的左值引用之间的公共引用类型。
7) 仅用于阐述的概念 dereferenceable 当且仅当表达式 * std:: declval < T & > ( ) 合法且具有 可引用类型 时得到满足。
8) 仅用于说明的别名模板 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 >
定义以处理此类情况

参见

规定类型可通过应用 * 运算符间接读取
(概念)
规定 semiregular 类型可通过前置和后置递增运算符进行递增
(概念)
计算 indirectly_readable 类型的值类型
(类模板)
计算 weakly_incrementable 类型的差值类型
(类模板)
为迭代器的属性提供统一接口
(类模板)
获取范围的迭代器和哨兵类型
(别名模板)
获取范围的引用类型
(别名模板)
获取范围的大小、差值和值类型
(别名模板)