作者:江山代有人2502914563 | 来源:互联网 | 2022-12-22 10:55
我不明白在标准中包含std :: nullopt_t的原因.它是否仅为方便起见而存在,还是在某些利基环境中需要?
为了清楚起见,我理解它被用作构造空std :: optional对象的参数.但是考虑到std :: optional的默认构造函数已经存在,似乎没有明显的动机存在std :: nullopt_t.对于std :: optional,是否必须存在这样的构造函数和赋值运算符以符合特定的概念?如果是这样,哪个概念?
1> eerorika..:
nullopt_t
是nullopt
指示脱离optional
状态的类型.nullopt
允许消除歧义,例如(来自optional
提案的示例):
void run(complex v);
void run(optional v);
run(nullopt); // pick the second overload
run({}); // ambiguous
@ZarkBardoo在某种意义上说,例如`auto`是"严格为了方便"."便利性"使得编写错误更加困难.我们可以用[brainfuck](https://en.wikipedia.org/wiki/Brainfuck)替换整个标准,我们仍然可以编写所有相同的程序.它不那么"方便"了.