std::ranges::iter_move
来自 cppreference.com
在头文件 <iterator> 中定义 |
||
inline namespace /* unspecified */ { inline constexpr /* unspecified */ iter_move = /* unspecified */; |
(自 C++20 起) (自定义点对象) |
|
调用签名 |
||
template< class T > requires /* see below */ |
(自 C++20 起) | |
从给定的迭代器获取右值引用或右值临时值。
A ranges::iter_move(t) 与 表达式等效 于
- iter_move(t),如果 t 具有类或枚举类型,并且当被视为 未评估操作数 时,表达式是格式良好的,其中
iter_move
的 重载解析 仅使用通过 自变量相关查找 找到的候选者执行。 - 否则,std::move(*t) 如果 *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
实例都是相等的。无论表示该实例的表达式是左值还是右值,以及是否具有 const 限定,在相同参数上调用不同 __iter_move_fn
类型的实例的效果都是等效的(但是,不需要调用 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) |
将基础迭代器解引用的结果转换为其关联的右值引用类型 (函数) |