命名空间
变体
操作

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
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器基元
iter_value_titer_difference_titer_reference_titer_const_reference_titer_rvalue_reference_titer_common_reference_t
(C++20)(C++20)(C++20)(C++23)(C++20)(C++20)
算法概念和工具
间接可调用概念
常见算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(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 = /* 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 =
    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 = /* see below */;
(4) (自 C++20 起)
template< /*dereferenceable*/ T>

    requires /* see below */
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*/ = /* see below */;
(7) (仅供说明*)
template< std::indirectly_readable T >
using /*indirect-value-t*/ = /* see below */;
(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 表示以下内容
  • std::invoke_result_t<Proj&, /*indirect-value-t*/<I>> 如果 Tstd::projected<I, Proj> 相同,对于某些类型 IProj
  • 否则,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>
定义以处理此类情况

[编辑] 另请参见

指定通过应用运算符 * 来间接读取类型
(概念) [编辑]
指定 semiregular 类型可以通过前缀和后缀递增运算符递增
(概念) [编辑]
计算 indirectly_readable 类型的值类型
(类模板) [编辑]
计算 weakly_incrementable 类型的差值类型
(类模板) [编辑]
提供对迭代器属性的统一接口
(类模板) [编辑]
获取范围的迭代器和哨兵类型
(别名模板)[编辑]
获取范围的引用类型
(别名模板)[编辑]
获取范围的大小、差值和值类型
(别名模板)[编辑]