https://cpprefjp.github.io/reference/optional/optional.html
上記の例がわかりやすい。
#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
std::optionalは、無効値が発生しうる関数の戻り値として、無効値が発生したらstd::nulloptを返して、呼び出し側で制御するために使う。
ただし、
std::optional<int&> safe_divide(int a, int b)
のように、optionalに参照を設定するとビルドエラーになる。
なので、参照を戻り値として受け取って、呼び出し側で変更する形の関数には適用できない。
コメントを残す