// optional<T>版のオーバーロード
constexpr const T* operator->() const; // (1) C++17
constexpr T* operator->(); // (2) C++17
// optional<T&>版のオーバーロード (C++26)
constexpr T* operator->() const noexcept; // (3) C++26
概要
保持している有効値のメンバにアクセスする。
- (1) :
optional<T>のconst版。const T*を返す - (2) :
optional<T>の非const版。T*を返す - (3) :
optional<T&>の場合。T*を返す
optional<T>では (1), (2) が定義され、optional<T&>では (3) のみが定義される。
堅牢化された事前条件
*thisが有効な値を保持していること
戻り値
- (1) : 有効値への
const T* - (2) : 有効値への
T* - (3) : 参照先への
T*
例外
投げない
備考
optionalクラスはスマートポインタとしても見なせるため、この演算子のようなポインタのインタフェースを持つ。非ポインタインタフェースであるvalue()の使用も検討するとよい。
例
#include <iostream>
#include <optional>
#include <string>
int main()
{
std::optional<std::string> p = "Hello";
if (p) {
std::size_t size = p->size(); // 有効値のメンバ関数を呼び出す
std::cout << size << std::endl;
}
}
出力
5
バージョン
言語
- C++17
処理系
- Clang: 4.0.1 ✅
- GCC: 7.2 ✅
- ICC: ??
- Visual C++: ??