【C++】無効値を指定可能なstd::optionalの使い方

C++17から使えるようになった値型にもnullのような無効な値を指定できるnulloptの使い方です。

宣言

ヘッダー宣言

#include <optional> // 使うときはこれを宣言する

判定方法

std::optional を受け取ったときの判定方法

// (1) サンプル用のクラス
class Sample
{
public:
    int foo();
}

// (2) optionalを取得する関数
std::optional<Sample> getSample();

// (3) 受け取ったときの処理
main()
{
    std::optional<Sample> value = getSample();
    if(value == std::nullopt) // 無効値はstd::nullopt(構造体)で判定できる
    {
        // 無効値が設定されている場合
        std::cout << "value is nullopt" << std::endl;
    }
    else
    {
        // 有効な値が設定されている場合
        int temp = value.foo();
        std::cout << temp << std::endl;
    }
}

optionalの作成方法

optional の作り方。optional な変数に値を代入すれば作成できる。

// 普通に代入できる
Sample s;
std::optional<Sample> value = s;

型がコンテキストから推測できるなら自動で変換されるケース

std::optional<Sample> getSample()
{
    Sample s1;
    auto opt = (std::optional<Sample>)s1; // 変換できる
    
    Sample ss;
    return ss; // ここで暗黙的に変換してくれる
}

以上