constexpr const T& value() const&; // (1)
constexpr T& value() &; // (2)
constexpr T&& value() &&; // (3)
constexpr const T&& value() const&&; // (4)
概要
有効値を取得する。
- (1) :
*this
がconst
左辺値である場合に、有効値へのconst
左辺値参照を返す - (2) :
*this
が非const
左辺値である場合に、有効値への非const
左辺値参照を返す - (3) :
*this
が右辺値である場合に、有効値への右辺値参照を返す - (4) :
*this
がconst
右辺値である場合に、有効値へのconst
右辺値参照を返す
効果
- (1), (2) : 有効値を保持している場合、有効値への参照を返す
- (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
- ICC: ??
- Visual C++: ??