std::ranges::iter_move
来自 cppreference.cn
< cpp | 迭代器 (iterator)
定义于头文件 <iterator> |
||
inline namespace /* 未指定 */ { inline constexpr /* 未指定 */ iter_move = /* 未指定 */; |
(C++20 起) (定制点对象) |
|
调用签名 (Call signature) |
||
template< class T > requires /* 见下文 */ |
(C++20 起) | |
从给定迭代器获取右值引用或纯右值临时对象。
ranges::iter_move(t) 在表达式等价于
- iter_move(t),如果 t 具有类或枚举类型,并且当该表达式被视为未求值操作数时格式良好,其中
iter_move
的重载决议仅使用通过实参依赖查找找到的候选函数。 - 否则,如果 *t 格式良好且是左值,则为 std::move(*t)。
- 否则,如果 *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
遵循
- std::invocable<__iter_move_fn, Args...>,
- std::invocable<const __iter_move_fn, Args...>,
- std::invocable<__iter_move_fn&, Args...> 和
- std::invocable<const __iter_move_fn&, Args...>.
否则,__iter_move_fn
的任何函数调用运算符都不参与重载决议。
[编辑] 示例
本节不完整 原因:无示例 |
[编辑] 另见
(C++20) |
将解引用后的底层迭代器的结果转换为其关联的右值引用类型 (函数) |
(C++20) |
将底层迭代器解引用的结果转换为其关联的右值引用类型 (函数) |