最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

class
<optional>

# std::nullopt_t(C++17)

    namespace std {
      struct nullopt_t {以下参照};
      inline constexpr nullopt_t nullopt {unspecified};
    }

## 概要

`nullopt_t`は、実装を持たない空のクラスである。この型は、`std::optional`クラスにおいて、有効な値を保持していない状態を表すために使用される。

この型の値を持つ`nullopt`定数を`std::optional`クラスのオブジェクトに代入することで、有効な値を保持していない状態にできる。

`nullopt_t`クラスは、デフォルトコンストラクタおよび初期化子リストコンストラクタを持たない。これは、`nullopt`変数を`nullopt_t`型の唯一の値とするためである。また、`nullopt_t`は集成体ではない。これは`optional<T> opt = {};`を曖昧にしないためである。

## 例

    #include <cassert>
    #include <optional>

    int main()
    {
      std::optional<int> p;
      assert(!p); // デフォルトでは有効な値を持たない (nullopt状態)

      p = 3; // 有効値を代入
      assert(p); // 有効な値を持つ

      p = std::nullopt; // 無効値を代入
      assert(!p); // 有効な値を持たない
    }

### 出力

## バージョン

### 言語

- C++17

### 処理系

- Clang: 4.0.1 ✅
- GCC: 7.2 ✅
- ICC: ??
- Visual C++: ??

## 関連項目

- `std::optional`クラス

## 参照

- LWG Issue 2736. `nullopt_t` insufficiently constrained