名前空間
変種
操作

std::optional<T>::value_or

提供: cppreference.com
< cpp‎ | utility‎ | optional
 
 
 
 
template< class U >
constexpr T value_or( U&& default_value ) const&;
(C++17以上)
template< class U >
constexpr T value_or( U&& default_value ) &&;
(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';
}

出力例:

(none)

[編集] 関連項目

格納されている値を返します
(パブリックメンバ関数) [edit]