命名空间
变体
操作

std::ranges::iter_move

来自 cppreference.cn
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
迭代器定制点
ranges::iter_move
(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>
inline namespace /* 未指定 */ {

    inline constexpr /* 未指定 */ iter_move = /* 未指定 */;

}
(C++20 起)
(定制点对象)
调用签名 (Call signature)
template< class T >

    requires /* 见下文 */

constexpr decltype(auto) iter_move( T&& t ) noexcept(/* 见下文 */);
(C++20 起)

从给定迭代器获取右值引用或纯右值临时对象。

ranges::iter_move(t)表达式等价

  1. iter_move(t),如果 t 具有类或枚举类型,并且当该表达式被视为未求值操作数时格式良好,其中 iter_move重载决议仅使用通过实参依赖查找找到的候选函数。
  2. 否则,如果 *t 格式良好且是左值,则为 std::move(*t)
  3. 否则,如果 *t 格式良好且是右值,则为 *t

在所有其他情况下,对 ranges::iter_move 的调用是格式错误的,这可能导致当 ranges::iter_move(e) 出现在模板实例化的直接上下文中时发生替换失败

如果 ranges::iter_move(e) 不等于 *e,则程序格式错误,不需要诊断。

自定义点对象

名称 ranges::iter_move 表示一个自定义点对象,它是字面量semiregular类类型的 const 函数对象。为了说明目的,其类型的不带 cv 限定符的版本表示为 __iter_move_fn

__iter_move_fn 的所有实例都相等。在相同实参上调用 __iter_move_fn 类型的不同实例的效果是等价的,无论表示实例的表达式是左值还是右值,以及是否带有 const 限定符(然而,带有 volatile 限定符的实例不要求可调用)。因此,ranges::iter_move 可以自由复制,并且其副本可以互换使用。

给定一组类型 Args...,如果 std::declval<Args>()... 满足上述 ranges::iter_move 的实参要求,则 __iter_move_fn 遵循

否则,__iter_move_fn 的任何函数调用运算符都不参与重载决议。

[编辑] 示例

[编辑] 另见

(C++20)
将解引用后的底层迭代器的结果转换为其关联的右值引用类型
(函数) [编辑]
(C++20)
将底层迭代器解引用的结果转换为其关联的右值引用类型
(函数) [编辑]