命名空间
变体
操作

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
 
 
迭代器库
迭代器概念
迭代器原语
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 = /* 见下文 */;
(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) 仅为解释目的的概念 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++ 标准。

DR 应用于 已发布行为 正确行为
P2609R3 C++20 std::iter_common_reference_t 定义于
std::iter_value_t<T>&,其错误地处理了
std::projected 类型,该类型投影到右值引用类型中
定义于
/*间接值类型*/<T>
以处理此类情况

[编辑] 参见

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