任意の型Tの値を有効値として、あらゆる型に共通の無効値状態を表現できる.

使用例

#include <iostream>
#include <optional>

// 除算をする関数。
// ゼロ割りを試みた場合、無効値が返る
std::optional<int> safe_divide(int a, int b)
{
  if (b == 0)
    return std::nullopt;

  return a / b;
}

int main()
{
  // 9/3を計算する
  std::optional<int> result1 = safe_divide(9, 3);
  if (result1) { // 計算に成功した場合、有効値が返る
    int x = result1.value(); // 有効値を取り出す
    std::cout << x << std::endl;
  }

  // 3/0の計算を試みる
  std::optional<int> result2 = safe_divide(3, 0);
  if (!result2) { // 計算に失敗した場合、無効値が返る
    std::cout << "error" << std::endl;
  }
}
/*
出力
3
error
*/

参考サイト

optional - cpprefjp C++日本語リファレンス