std::experimental::optional<T>::swap
來自 cppreference.com
< cpp | experimental | optional
void swap( optional& other ) noexcept(/* 見下文 */); |
(庫基礎 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)。
目錄 |
[編輯] 引數
其他 | - | 用於交換內容的 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 演算法 (函式) |