命名空间
变体
操作

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
 
 
迭代器库
迭代器概念
迭代器原语
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)
算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
 
定义于头文件 <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 =
    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< /*可解引用*/ 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>,

                            /*间接值类型*/<T>>;
(6) (C++20 起)
帮助模板
template< class T >
concept /*可解引用*/ = /* 见下文 */;
(7) (仅作说明*)
template< std::indirectly_readable T >
using /*间接值类型*/ = /* 见下文 */;
(8) (仅作说明*)

计算迭代器的关联类型。

1) 计算 T值类型
2) 计算 T引用类型
3) 计算 T常量引用类型
4) 计算 T差值类型
5) 计算 T右值引用类型。此别名模板的约束仅在表达式 ranges::iter_move(std::declval<T&>()) 有效且具有可引用类型时才满足。
6) 计算 T共同引用类型。这是其引用类型与其值类型的左值引用之间的共同引用类型。
7) 仅用于解释的 concept dereferenceable 仅在表达式 *std::declval<T&>() 有效且具有可引用类型时才满足。
8) 仅用于解释的别名模板 indirect-value-t 表示以下内容:
  • std::invoke_result_t<Proj&, /*间接值类型*/<I>> 如果 Tstd::projected<I, Proj> 相同,其中 IProj 是某些类型。
  • 否则,为 std::iter_value_t<T>&

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
P2609R3 C++20 std::iter_common_reference_t 曾以
std::iter_value_t<T>& 的形式定义,这错误地处理了
std::projected 类型,这些类型会投影为右值引用类型
已根据
/*间接值类型*/<T>
进行定义以处理此类情况。

[编辑] 参阅

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