6

以下に、c++ 用に提案されたオブジェクトのnullopt_tとについて説明します。nulloptoptional

struct nullopt_t{see below}; 
constexpr nullopt_t nullopt(unspecified);

[...] nullopt_t 型にはデフォルトのコンストラクターがありません。それはリテラル型でなければなりません。定数 nullopt は、リテラル型の引数で初期化されます。

この理由は、ドキュメントの op = {} 構文の章で説明されています: をop = {}明確にするために、いくつかのトリックを採用するnullopt_t必要があります。

私の質問は、ここでリテラル型が何を意味するかです。私はこのSO投稿を見つけました。したがって、別の空のクラスで十分だと思います。コンストラクタを取ることもできintますか?

最小限の適合nullopt_tクラスはどのようになりますか?

このようなもの:

struct nullopt_t_construct_tag_t{};

struct nullopt_t {
  nullopt_t() = delete; // I know declaring it as deleted is redundant
  constexpr nullopt_t(nullopt_t_construct_tag_t) {};
};

constexpr nullopt_t nullopt(nullopt_t_construct_tag_t{});

またはこれ:

struct nullopt_t {
  nullopt_t() = delete;
  constexpr nullopt_t(int) {};
};

constexpr nullopt_t nullopt(0);
4

1 に答える 1