std::experimental::optional<T>::operator=
From cppreference.com
< cpp | experimental | optional
| optional& operator=( std::experimental::nullopt_t ); |
(1) | (Library Fundamentals TS) |
| optional& operator=( const optional& other ); |
(2) | (Library Fundamentals TS) |
| optional& operator=( optional&& other ) noexcept( /* see below */ ); |
(3) | (Library Fundamentals TS) |
| template< class U > optional& operator=( U&& value ); |
(4) | (Library Fundamentals TS) |
現在の*thisの内容をotherの内容で置き換えます。
1) もし呼び出し前に*thisが値を保持していた場合、保持していた値はval->T::~T()のようにデストラクタを呼び出して破棄されます。*thisはこの呼び出し後、値を保持しません。
2,3) otherの状態を代入します。
- もし*thisとotherの両方が値を保持していない場合、この関数は何も行いません。
- もし*thisが値を保持しているが、otherが値を保持していない場合、保持していた値はデストラクタを呼び出して破棄されます。*thisはこの呼び出し後、値を保持しません。
- もしotherが値を保持している場合、*thisが値を保持しているかどうかに応じて、保持していた値はother (2) からstd::move(*other) (3) として直接初期化されるか、代入されます。ムーブされた後のoptionalも依然として*値を保持している*ことに注意してください。
4) Decay-only perfect-forwarded代入: 呼び出し前に*thisが値を保持していたかどうかに応じて、保持していた値はstd::forward<U>(value)から直接初期化されるか、std::forward<U>(value)から代入されます。この関数は、std::is_same<std::decay_t<U>, T>::valueがtrueでない限り、オーバーロード解決に参加しません。
目次 |
[編集] パラメータ
| その他 | - | 代入する値を含む別のoptionalオブジェクト |
| value | - | 保持されている値に代入する値。 |
| 型要件 | ||
-オーバーロード(2)を使用するには、TはCopyAssignableおよびCopyConstructibleの要件を満たす必要があります。 | ||
-オーバーロード(3)を使用するには、TはMoveAssignableおよびMoveConstructibleの要件を満たす必要があります。 | ||
[編集] 戻り値
*this
[編集] 例外
2-4)
(3) は以下の
Tのコンストラクタまたは代入演算子によってスローされる例外をスローします。例外がスローされた場合、*this(および(2)の場合はother)の初期化状態は変更されません。つまり、オブジェクトが値を保持していた場合は引き続き値を保持し、そうでない場合はそうでないままです。 valueの内容、および*thisとotherの保持値は、例外が発生した操作(コピーコンストラクタ、ムーブ代入など)の例外安全保証に依存します。(3) は以下の
noexcept宣言を持っていますnoexcept 指定:
noexcept(std::is_nothrow_move_assignable<T>::value && std::is_nothrow_move_constructible<T>::value)
[編集] 注記
optionalオブジェクトopは、op = {} および op = nullopt の両方で空のoptionalにすることができます。
[編集] 例
このコードを実行
#include <experimental/optional> #include <iostream> int main() { std::experimental::optional<const char*> s1 = "abc", s2; // constructor s2 = s1; // assignment s1 = "def"; // decaying assignment (U = char[4], T = const char*) std::cout << *s2 << ' ' << *s1 << '\n'; }
出力
abc def
[編集] 関連項目
| 保持する値を直接構築する (public member function) [[編集]] |