std::experimental::optional<T>:: operator=
From cppreference.net
<
cpp
|
experimental
|
optional
|
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)
(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
)
注記
オプショナルオブジェクト
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
関連項目
|
包含されている値をその場で構築する
(公開メンバ関数) |