std::experimental::optional<T>::swap
From cppreference.com
< cpp | experimental | optional
| void swap( optional& other ) noexcept(/* 以下参照 */); |
(Library Fundamentals 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 アルゴリズムを特殊化する (関数) |