任意の型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
*/