名前空間
変種
操作

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

From cppreference.com
 
 
 
 
 
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の状態を代入します。
  • もし*thisotherの両方が値を保持していない場合、この関数は何も行いません。
  • もし*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>::valuetrueでない限り、オーバーロード解決に参加しません。

目次

[編集] パラメータ

その他 - 代入する値を含む別のoptionalオブジェクト
value - 保持されている値に代入する値。
型要件
-
オーバーロード(2)を使用するには、TCopyAssignableおよびCopyConstructibleの要件を満たす必要があります。
-
オーバーロード(3)を使用するには、TMoveAssignableおよびMoveConstructibleの要件を満たす必要があります。

[編集] 戻り値

*this

[編集] 例外

2-4) Tのコンストラクタまたは代入演算子によってスローされる例外をスローします。例外がスローされた場合、*this(および(2)の場合はother)の初期化状態は変更されません。つまり、オブジェクトが値を保持していた場合は引き続き値を保持し、そうでない場合はそうでないままです。 valueの内容、および*thisotherの保持値は、例外が発生した操作(コピーコンストラクタ、ムーブ代入など)の例外安全保証に依存します。
(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) [[編集]]
English 日本語 中文(简体) 中文(繁體)