◐ Shell
clean mode source ↗

std::optional<T>::value_or - cppreference.com

提供: cppreference.com

<tbody> </tbody>

template< class U > constexpr T value_or( U&& default_value ) const&;

(1) (C++17以上)

template< class U > constexpr T value_or( U&& default_value ) &&;

(2) (C++17以上)

*this に値が格納されている場合、その格納されている値を返します。 そうでなければ、 default_value を返します。

1) bool(*this) ? **this : static_cast<T>(std::forward<U>(default_value)) と同等です。

2) bool(*this) ? std::move(**this) : static_cast<T>(std::forward<U>(default_value)) と同等です。

引数

default_value - *this が空の場合に使用する値
型の要件
-オーバーロード (1) を使用するためには TCopyConstructible の要件を満たさなければなりません。
-オーバーロード (2) を使用するためには TMoveConstructible の要件を満たさなければなりません。
-U&&T に変換可能でなければなりません。

戻り値

*this に値が格納されている場合はその値、そうでなければ default_value

例外

戻り値 T の選択されたコンストラクタによって投げられるあらゆる例外。

#include <optional>
#include <iostream>
#include <cstdlib>

std::optional<const char*> maybe_getenv(const char* n)
{
    if(const char* x = std::getenv(n))
       return x;
    else
       return {};
}
int main()
{
     std::cout << maybe_getenv("MYPWD").value_or("(none)") << '\n';
}

出力例:

関連項目