std::ranges::iter_move
来自 cppreference.cn
定义于头文件 <iterator> |
||
inline namespace /* unspecified */ { inline constexpr /* unspecified */ iter_move = /* unspecified */; |
(自 C++20 起) (定制点对象) |
|
调用签名 |
||
template< class T > requires /* see below */ |
(自 C++20 起) | |
从给定迭代器获取右值引用或纯右值临时量。
若 t 拥有类或枚举类型,且当被视为未求值运算数时表达式 ranges::iter_move(t) 良构,则它等价于表达式
- iter_move(t),其中
iter_move
的重载决议仅以通过实参依赖查找找到的候选者进行。 - 否则,若 *t 良构且为左值,则为 std::move(*t)。
- 否则,若 *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
建模
- 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) |
将底层迭代器的解引用的结果转型到其关联的右值引用类型 (函数) |