Namespaces
Variants

std::experimental::optional<T>:: optional

From cppreference.net
constexpr optional ( ) noexcept ;
constexpr optional ( std:: experimental :: nullopt_t ) noexcept ;
(1) (ライブラリ基盤 TS)
optional ( const optional & other ) ;
(2) (ライブラリ基盤 TS)
optional ( optional && other ) noexcept ( /* 下記参照 */ ) ;
(3) (ライブラリ基盤 TS)
constexpr optional ( const T & value ) ;
(4) (ライブラリ基盤 TS)
constexpr optional ( T && value ) ;
(5) (ライブラリ基盤 TS)
template < class ... Args >
constexpr explicit optional ( std:: experimental :: in_place_t , Args && ... args ) ;
(6) (ライブラリ基盤 TS)
template < class U, class ... Args >

constexpr explicit optional ( std:: experimental :: in_place_t ,
std:: initializer_list < U > ilist,

Args && ... args ) ;
(7) (ライブラリ基盤 TS)

新しい optional オブジェクトを構築します。

1) 値を含まないオブジェクトを構築します。
2) コピーコンストラクタ: other が値を保持している場合、 直接初期化 (ただし直接リスト初期化ではない)によって型 T のオブジェクトを式 * other で初期化するように、保持する値を初期化する。 other が値を保持していない場合、 値を保持しない オブジェクトを構築する。
3) ムーブコンストラクタ: other が値を含む場合、 直接初期化 (ただし直接リスト初期化ではない)によって型 T のオブジェクトを式 std :: move ( * other ) で初期化し、 かつ other を空に しない :ムーブされたoptionalは依然として 値を含む が、値自体はムーブされている。 other が値を含まない場合、 値を含まない オブジェクトを構築する。
4) 値を含むoptionalオブジェクトを構築します。この値は、 direct-initialization (ただしdirect-list-initializationではない)を使用して型 T のオブジェクトを式 value で初期化するかのように初期化されます。このコンストラクタは、direct-initializationによって選択された T のコンストラクタが constexpr の場合、 constexpr となります。
5) 値を含むoptionalオブジェクトを構築します。この値は、 direct-initialization (ただしdirect-list-initializationではない)によって型 T のオブジェクトを式 std :: move ( value ) で初期化するかのように初期化されます。このコンストラクタは、direct-initializationによって選択される T のコンストラクタが constexpr の場合、 constexpr となります。
6) 値を含むoptionalオブジェクトを構築します。この値は、 direct-initializing (ただしdirect-list-initializingではない)によって型 T のオブジェクトを引数 std:: forward < Args > ( args ) ... から初期化するかのように初期化されます。
7) 値を含むoptionalオブジェクトを構築します。この値は、 direct-initializing (ただしdirect-list-initializingではない)によって T 型のオブジェクトを引数 ilist, std:: forward < Args > ( args ) ... から初期化したかのように初期化されます。この関数は、 std:: is_constructible < T, std:: initializer_list < U > & , Args && ... > :: value ! = true の場合、オーバーロード解決に参加しません。

目次

パラメータ

other - コピーする対象の値を持つ別の optional オブジェクト
value - 格納される値を初期化する値
args... - 格納される値を初期化する引数
ilist - 格納される値を初期化する初期化子リスト
型要件
-
T はオーバーロード(2,4)を使用するために CopyConstructible の要件を満たさなければならない
-
T はオーバーロード(3,5)を使用するために MoveConstructible の要件を満たさなければならない

例外

2) T のコンストラクタによってスローされるあらゆる例外をスローします。
3) T のコンストラクタによってスローされるあらゆる例外をスローします。以下の noexcept 宣言を持ちます:
noexcept 指定子:
noexcept ( std:: is_nothrow_move_constructible < T > :: value )
4-7) T のコンストラクタによってスローされるあらゆる例外をスローします。

#include <experimental/optional>
#include <iostream>
#include <string>
int main()
{
    std::experimental::optional<int> o1,      // 空
                                     o2 = 1,  // 右辺値からの初期化
                                     o3 = o2; // コピーコンストラクタ
    std::experimental::optional<std::string> o4(std::experimental::in_place,
                                                {'a', 'b', 'c'});
    std::cout << *o2 << ' ' << *o3 << ' ' << *o4 << '\n';
}

出力:

1 1 abc

関連項目

optional オブジェクトを作成する
(関数テンプレート)