我不明白在标准中包含std :: nullopt_t的原因。它是否仅为方便起见而存在,还是在某些特殊情况下需要它?
要清楚,我知道它被用作构造空std :: optional对象的参数。但是考虑到std :: optional的默认构造函数已经存在,似乎没有明显的动机存在std :: nullopt_t。对于std :: optional,是否必须存在这样的构造函数和赋值运算符以符合特定的概念?如果是这样,哪个概念?
答案 0 :(得分:8)
nullopt
是optional
的类型,表示已脱离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
。