• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    class template
    <variant>

    std::monostate

    namespace std {
      struct monostate {};
    }
    

    概要

    monostateは、variantに空の状態を持たせるための空のクラスである。

    variantは、候補型のうち0番目の型の値をデフォルトで保持する。そのため、エラーによって空になることはあっても、通常の操作として「空」を表現できない。

    variantの候補型としてmonostateを指定し、そのオブジェクトを保持させることで、擬似的に空の状態を表現できる。候補型の0番目にmonostateを指定することで、variantデフォルト構築状態を空にできる。

    備考

    メンバ関数

    構築・破棄

    名前 説明 対応バージョン
    monostate() = default; コンストラクタ C++17
    ~monostate() = default; デストラクタ C++17
    monostate& operator=(const monostate&) = default;
    monostate& operator=(monostate&&) = default;
    代入演算子 C++17

    非メンバ関数

    比較演算子

    名前 説明 対応バージョン
    constexpr bool operator==(monostate, monostate) noexcept; 等値比較。trueを返す C++17
    constexpr bool operator!=(monostate, monostate) noexcept; 非等値比較。falseを返す (C++20から==により使用可能) C++17
    constexpr strong_ordering operator<=>(monostate, monostate) noexcept; 三方比較。strong_ordering::equalを返す C++20
    constexpr bool operator<(monostate, monostate) noexcept; 左辺が右辺より小さいかを判定する。falseを返す (C++20から<=>により使用可能) C++17
    constexpr bool operator<=(monostate, monostate) noexcept; 左辺が右辺以下かを判定する。trueを返す (C++20から<=>により使用可能) C++17
    constexpr bool operator>(monostate, monostate) noexcept; 左辺が右辺より大きいかを判定する。falseを返す (C++20から<=>により使用可能) C++17
    constexpr bool operator>=(monostate, monostate) noexcept; 左辺が右辺以上かを判定する。trueを返す (C++20から<=>により使用可能) C++17

    #include <iostream>
    #include <variant>
    
    int main()
    {
      // デフォルト構築で空にする
      std::variant<std::monostate, int, double> v;
    
      if (std::holds_alternative<std::monostate>(v)) {
        std::cout << "empty" << std::endl;
      }
    
      v = 1;
      v = std::monostate{}; // 空にする
    }
    

    出力

    empty
    

    バージョン

    言語

    • C++17

    処理系

    参照