命名空间
变体
动作

std::ranges::iter_move

来自 cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念和实用程序
间接可调用概念
常见算法要求
(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 /* unspecified */ {

    inline constexpr /* unspecified */ iter_move = /* unspecified */;

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

    requires /* see below */

constexpr decltype(auto) iter_move( T&& t ) noexcept(/* see below */);
(自 C++20 起)

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

A ranges::iter_move(t)表达式等效

  1. iter_move(t),如果 t 具有类或枚举类型,并且当被视为 未评估操作数 时,表达式是格式良好的,其中 iter_move重载解析 仅使用通过 自变量相关查找 找到的候选者执行。
  2. 否则,std::move(*t) 如果 *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 实例都是相等的。无论表示该实例的表达式是左值还是右值,以及是否具有 const 限定,在相同参数上调用不同 __iter_move_fn 类型的实例的效果都是等效的(但是,不需要调用 volatile 限定实例)。因此,可以自由地复制 ranges::iter_move,并且其副本可以互换使用。

给定一组类型 Args...,如果 std::declval<Args>()... 满足上面 ranges::iter_move 参数的要求,__iter_move_fn 建模

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

[编辑] 示例

[编辑] 另请参见

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