以下に、c++ 用に提案されたオブジェクトのnullopt_t
とについて説明します。nullopt
optional
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);