最終更新日時(UTC):
が更新

履歴 編集

function template
<optional>

std::optional::value_or(C++17)

// optional<T>版のオーバーロード
template <class U> constexpr T value_or(U&& v) const&; // (1)
template <class U> constexpr T value_or(U&& v) &&;     // (2)

// optional<T&>版のオーバーロード (C++26)
template <class U = remove_cv_t<T>>
constexpr remove_cv_t<T> value_or(U&& u) const;        // (3) C++26

概要

有効値もしくは指定された無効値を取得する。

  • (1) : *thisconst左辺値である場合。有効値を保持していれば有効値を返し、そうでなければvを返す
  • (2) : *thisが右辺値である場合。有効値を保持していれば有効値をムーブして返し、そうでなければvを返す
  • (3) : optional<T&>の場合。有効値を保持していれば参照先の値を返し、そうでなければuを返す

optional<T>では (1), (2) が定義され、optional<T&>では (3) のみが定義される。

要件

効果

  • (1), (2) : 以下の式と等価の効果を持つ:

    return has_value() ? value() : static_cast<T>(std::forward<U>(v));
    

  • (3) : 以下の式と等価の効果を持つ:

    return has_value() ? *val : std::forward<U>(u);
    

#include <iostream>
#include <optional>

int main()
{
  std::optional<int> p1 = 3;
  // p1が有効値を持っていればそれが返り、持っていなければ-1が返る
  int result1 = p1.value_or(-1);
  std::cout << result1 << std::endl;

  std::optional<int> p2;
  int result2 = p2.value_or(-1);
  std::cout << result2 << std::endl;
}

出力

3
-1

バージョン

言語

  • C++17

処理系

関連項目

参照