为什么std :: nullopt_t是C ++标准的一部分?

时间:2018-04-02 19:46:00

标签: c++ c++17

我不明白在标准中包含std :: nullopt_t的原因。它是否仅为方便起见而存在,还是在某些特殊情况下需要它?

要清楚,我知道它被用作构造空std :: optional对象的参数。但是考虑到std :: optional的默认构造函数已经存在,似乎没有明显的动机存在std :: nullopt_t。对于std :: optional,是否必须存在这样的构造函数和赋值运算符以符合特定的概念?如果是这样,哪个概念?

2 个答案:

答案 0 :(得分:8)

nulloptoptional的类型,表示已脱离nullopt州。 optional允许消除歧义,例如来自void run(complex<double> v); void run(optional<string> v); run(nullopt); // pick the second overload run({}); // ambiguous 提案的示例:

<strong class="highlighted">

答案 1 :(得分:0)

C ++引用说明了一切:

  

std::nullopt_t是一个空类类型,用于指示具有未初始化状态的optional类型。特别是,std::optional有一个构造函数nullopt_t作为单个参数,它创建一个不包含值的optional

std::nullopt_t