std::iter_value_t, std::iter_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_rvalue_reference_titer_common_reference_t
(C++20)(C++20)(C++20)(C++20)(C++20)

算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
流迭代器
迭代器定制点
迭代器操作
(C++11)
(C++11)
范围访问
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
在标头 <iterator> 定义
template< class T >
concept __Referenceable = /* see below */; // 仅用于阐释
template< class T >
using iter_value_t = /* see below */;
(1) (C++20 起)
template< __Referenceable T >
using iter_reference_t = decltype(*std::declval<T&>());
(2) (C++20 起)
template< class T >
using iter_difference_t = /* see below */;
(3) (C++20 起)
template< __Referenceable T>

    requires /* see below */

using iter_rvalue_reference_t = decltype(std::iter_move(std::declval<T&>()));
(4) (C++20 起)
template< std::indirectly_readable T >

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

                                                        std::iter_value_t<T>&>;
(5) (C++20 起)

计算迭代器的关联类型。仅用于阐释的概念 __Referenceable 若且唯若表达式 *std::declval<T&>() 合法且拥有可引用类型(特别是非 void )才得到满足。

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) 计算 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
4) 计算 T右值引用类型。此别名模版上的制约的 "see below" 部分若且唯若表达式 ranges::iter_move(std::declval<T&>()) 合法且拥有可引用类型(特别是非 void )才得到满足。
5) 计算 T共用引用类型。此乃其引用类型与到其值类型的左值引用类型的共用引用类型。

参阅

指定类型通过应用运算符 * 可读
(概念)
指定 semiregular 类型能以前后自增运算符自增
(概念)
计算 indirectly_readable 类型的值类型
(类模板)
计算 weakly_incrementable 类型的差类型
(类模板)
为迭代器各项性质提供统一接口
(类模板)