GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • cpprefjp - C++日本語リファレンス
  • GitHub Project

This view

  • Original page
  • New address

GeezerVison is showing cpprefjp.github.io — std::optional::value - cpprefjp C++日本語リファレンス

  1. リファレンス
  2. optional
  3. optional
  4. value

最終更新日時: 2026年09月11日 13時06分31秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<optional>

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

// optional<T>版のオーバーロード
constexpr const T& value() const&;   // (1) C++17
constexpr T& value() &;              // (2) C++17
constexpr T&& value() &&;            // (3) C++17
constexpr const T&& value() const&&; // (4) C++17

// optional<T&>版のオーバーロード (C++26)
constexpr T& value() const;          // (5) C++26

概要

有効値を取得する。

  • (1) : *thisがconst左辺値である場合に、有効値へのconst左辺値参照を返す
  • (2) : *thisが非const左辺値である場合に、有効値への非const左辺値参照を返す
  • (3) : *thisが右辺値である場合に、有効値への右辺値参照を返す
  • (4) : *thisがconst右辺値である場合に、有効値へのconst右辺値参照を返す
  • (5) : optional<T&>の場合に、参照先への左辺値参照を返す

optional<T>では (1)~(4) が定義され、optional<T&>では (5) のみが定義される。

効果

  • (1), (2), (5) : 有効値を保持している場合、有効値への参照を返す
  • (3), (4) : 有効値を保持している場合、有効値をムーブして返す

例外

有効値を保持していない状態でこの関数が呼び出された場合、bad_optional_access例外を送出する。

備考

この関数は、例外を送出しうるため、フリースタンディング処理系では削除される(フリースタンディング処理系では使用できない)。

例

#include <iostream>
#include <optional>

int main()
{
  std::optional<int> p1 = 3;
  if (p1) {
    int result = p1.value(); // 保持している値を取得する
    std::cout << "p1 : " << result << std::endl;
  }

  std::optional<int> p2;
  try {
    p2.value(); // 有効値を保持していないのに、有効値を取り出そうとした
  }
  catch (std::bad_optional_access& e) {
    std::cout << "p2 exception : " << e.what() << std::endl;
  }
}

出力

p1 : 3
p2 exception : bad optional access

バージョン

言語

  • C++17

処理系

  • Clang: 4.0.1 ✅
  • GCC: 7.2 ✅
  • Visual C++: ??

参照

  • getかvalueか - Faith and Brave - C++で遊ぼう
  • P2988R12 std::optional<T&>
    • C++26で参照型T&に対する部分特殊化を追加
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.