Namespaces
Variants

std::experimental::optional<T>:: operator=

From cppreference.net
optional & operator = ( std:: experimental :: nullopt_t ) noexcept ;
(1) (ライブラリ基盤仕様 TS)
optional & operator = ( const optional & other ) ;
(2) (ライブラリ基盤仕様 TS)
optional & operator = ( optional && other ) noexcept ( /* 詳細は後述 */ ) ;
(3) (ライブラリ基盤仕様 TS)
template < class U >
optional & operator = ( U && value ) ;
(4) (ライブラリ基盤仕様 TS)

* this の内容を other の内容で置き換えます。

1) 呼び出し前に * this が値を保持している場合、保持されている値は val - > T :: ~T ( ) によってデストラクタを呼び出すことで破棄される。 * this はこの呼び出し後に値を保持しない。
2,3) other の状態を代入する。
  • 両方の * this other が値を持たない場合、この関数は何も行わない。
  • * this が値を保持しているが other が値を保持していない場合、保持されている値はそのデストラクタを呼び出して破棄される。 * this は呼び出し後に値を保持しなくなる。
  • other が値を保持している場合、 * this が値を保持しているかどうかに応じて、保持されている値は direct-initialized されるか、 * other (2) または std :: move ( * other ) (3) から代入される。moveされたoptionalは依然として 値を保持している ことに注意。
4) 減衰のみの完全転送代入: 呼び出し前に * this が値を保持しているかどうかに依存して、保持されている値は std:: forward < U > ( value ) からの直接初期化、または std:: forward < U > ( value ) からの代入が行われる。この関数は std:: is_same < std:: decay_t < U > , T > :: value true でない限り、オーバーロード解決に参加しない。

目次

パラメータ

other - 代入する値を含む別の optional オブジェクト
value - 含まれる値に代入する値
型要件
-
T CopyAssignable および CopyConstructible の要件を満たす必要があります(オーバーロード(2)を使用する場合)。
-
T MoveAssignable および MoveConstructible の要件を満たす必要があります(オーバーロード(3)を使用する場合)。

戻り値

* this

例外

2-4) T のコンストラクタまたは代入演算子によってスローされるあらゆる例外をスローする。 例外がスローされた場合、 * this の初期化状態(および(2)の場合の other の状態)は変更されない。つまり、オブジェクトが値を含んでいた場合は依然として値を含み、その逆も同様である。 value の内容および * this other の保持する値の内容は、例外が発生した操作(コピーコンストラクタ、ムーブ代入など)の例外安全保証に依存する。
(3) は以下の noexcept 宣言を持つ:
noexcept 指定:

注記

オプショナルオブジェクト op は、以下の両方の方法で空のオプショナルに変換できます: op = { } ; および op = nullopt ;

#include <experimental/optional>
#include <iostream>
int main()
{
    std::experimental::optional<const char*> s1 = "abc", s2; // コンストラクタ
    s2 = s1; // 代入
    s1 = "def"; // 減衰代入 (U = char[4], T = const char*)
    std::cout << *s2 << ' ' << *s1 << '\n';
}

出力:

abc def

関連項目

包含されている値をその場で構築する
(公開メンバ関数)