std::experimental::ranges:: swap
|
namespace
{
constexpr
/* 未指定 */
swap
=
/* 未指定 */
;
|
(ranges TS)
(定制点对象) |
|
|
调用签名
|
||
|
template
<
class
T,
class
U
>
requires
/* 见下文 */
|
||
交换 t 和 u 所引用的值。
对
ranges::swap
的调用等价于:
- template < class T > void swap ( T & , T & ) = delete ;
- template < class T, std:: size_t N > void swap ( T ( & ) [ N ] , T ( & ) [ N ] ) = delete ;
-
通过
实参依赖查找
找到的任何
swap声明。
T
与
U
是等长度数组类型(但元素类型可能不同)的左值引用,且
ranges::
swap
(
*
t,
*
u
)
是合法表达式。
T
与
U
均为满足
MoveConstructible
<
V
>
及
Assignable
<
V
&
, V
>
语法要求的类型
V
的
V&
,则交换被引用的值,如同执行
V v
{
std
::
move
(
t
)
}
;
t
=
std
::
move
(
u
)
;
u
=
std
::
move
(
v
)
;
。若任一概念的语义要求未被满足,则程序非良构;不要求诊断。
ranges::swap
均属于病式结构。
ranges:: swap 若其所调用的每个函数(按上述规范)均能在常量表达式中使用,则其自身亦可用于常量表达式。
目录 |
定制点对象
名称
ranges::swap
表示一个
定制点对象
,它是一个字面量
Semiregular
类类型(为说明方便,记作
SwapT
)的
函数对象
。
SwapT
的所有实例都是等价的。因此,
ranges::swap
可以被自由复制,其副本可以互换使用。
给定一组类型
Args...
,若
std::
declval
<
Args
>
(
)
...
满足前述对
ranges::swap
参数的要求,则
SwapT
将满足
ranges
::
Invocable
<
const
SwapT, Args...
>
。否则,
SwapT
的函数调用运算符均不参与重载决议。
在每个定义了
ranges::swap
的翻译单元中,它都指向同一个定制点对象实例。(这意味着它可以自由用于内联函数和函数模板等场景,而不会违反
单一定义规则
。)
异常
swap
按上述方式查找获得。
std:: is_nothrow_move_assignable < V > :: value )
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
交换两个对象的值
(函数模板) |