std::experimental::optional<T>::swap
来自 cppreference.cn
< cpp | experimental | optional
void swap( optional& other ) noexcept(/* see below */); |
(库基础 TS) | |
与 other 的内容进行交换。
- 如果 *this 和 other 都不包含值,则此函数没有效果。
- 如果 *this 和 other 中只有一个包含值(我们称此对象为
in
,另一个为un
),则un
的包含值通过从 std::move(*in) 进行直接初始化,然后销毁in
的包含值,如同通过 in.val->T::~T()。在此调用之后,in
不包含值,而un
包含值。
- 如果 *this 和 other 都包含值,则通过调用 using std::swap; swap(**this, *other) 来交换包含的值。
T
左值必须满足 可交换 (Swappable)。
目录 |
[编辑] 参数
other | - | 要与之交换内容的 optional 对象 |
[编辑] 返回值
(无)
[编辑] 异常
noexcept 规范:
noexcept(std::is_nothrow_move_constructible<T>::value &&
noexcept(swap(std::declval<T&>(), std::declval<T&>()))
noexcept(swap(std::declval<T&>(), std::declval<T&>()))
如果抛出异常,则 *this 和 other 的包含值的状态由类型 T
的 swap
或 T
的移动构造函数的异常安全保证决定,无论调用哪个。对于 *this 和 other,如果对象包含值,则它仍将包含值,反之亦然。
[编辑] 参见
特化 std::swap 算法 (函数) |