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
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
(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)
 
<tbody> </tbody>
在标头 <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值类型
  • 如果 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
2) 计算 T引用类型
3) 计算 Tconst 引用类型
4) 计算 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
5) 计算 T右值引用类型。此别名模版的约束当且仅当表达式 ranges::iter_move(std::declval<T&>()) 合法且拥有可引用类型时才会得到满足。
6) 计算 T公共引用类型。该类型是它的引用类型与到它的值类型的左值引用类型的公共引用类型。
7) 仅用于阐述的概念 dereferenceable 当且仅当表达式 *std::declval<T&>() 合法且拥有可引用类型时才会得到满足。
8) 仅用于阐述的别名模板 indirect-value-t
  • T 等同于对于某个类型 IProjstd::projected<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 类型的差类型
(类模板) [编辑]
为迭代器各项性质提供统一接口
(类模板) [编辑]
获取范围的迭代器和哨位类型
(别名模板) [编辑]
取得范围的大小类型、差类型和值类型
(别名模板) [编辑]
取得范围的引用类型
(别名模板) [编辑]