命名空间
变体
操作

std::ranges::iter_move

来自 cppreference.cn
< 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 起)

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

t 拥有类或枚举类型,且当被视为未求值运算数时表达式 ranges::iter_move(t) 良构,则它等价于表达式

  1. iter_move(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 表示定制点对象,它是 函数对象 的 const 字面 semiregular 类类型。为阐释目的,其类型的非 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)
将底层迭代器的解引用的结果转型到其关联的右值引用类型
(函数) [编辑]