为什么std :: nullopt_t的一部分是C 标准的一部分
Why is std::nullopt_t part of the C++ standard?
我不明白将std::nullopt_t
纳入标准的原因。它是为了方便起见而严格存在的,还是在某些利基环境中需要?
要清楚,我知道它被用作构造空std::optional
对象的参数。但是考虑到std::optional
的默认构造函数已经存在,似乎没有明显的std::nullopt_t
的动机。对于std::optional
,是否存在这样的构造函数和分配操作员来符合特定概念?如果是这样,哪个概念?
nullopt_t
是指示脱离optional
状态的nullopt
的类型。nullopt
允许歧义过载,例如(例如optional
提案中(:
void run(complex<double> v); void run(optional<string> v); run(nullopt); // pick the second overload run({}); // ambiguous
这是我遇到的另一个示例:
// GCC: error: expected primary-expression before '{' token
// Clang: error: initializer list cannot be used on the right hand side of operator ':'
std::optional<int> x = some_condition ? std::optional(0) : {};
// works
std::optional<int> y = some_condition ? std::optional(0) : std::nullopt;
c 参考文献说明了一切:
std::nullopt_t
是一种空的类类型,用于指示具有非初始化状态的optional
类型。特别是,std::optional
具有一个nullopt_t
作为单个参数的构造函数,该参数创建不包含值的optional
。
std :: nullopt_t
相关文章:
- C++11 标准中的哪一部分规定了基元数据类型大小之间的相对顺序?
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- 为什么std :: nullopt_t的一部分是C 标准的一部分
- 标准的哪一部分决定了现场成员与初始化器列表的优先级
- 虚拟表是C++标准的一部分吗?
- C 标准的哪一部分涵盖通过空指针调用方法
- fabsf 是 C++11 中标准命名空间的一部分吗?
- 内联asm是ANSI C标准的一部分吗
- C 标准的哪一部分要求set ::擦除呼叫灾难源
- 是标准的一部分
- 模板类方法不会导致错误——这是标准的一部分
- strcpy_s是C++标准的一部分吗?或者只是MS Visual C++的一部分
- 模板模板模板参数是扩展还是标准的一部分
- 线程是标准C++的一部分
- "polymorphic base class"是C++标准的一部分吗?
- 值初始化是 C++98 标准的一部分吗?如果不是,为什么在 C++03 标准中添加它
- wcslen 是 ISO/IEC 14882:2003 C++标准库的一部分吗?
- #import C++11 标准的一部分
- boost Range库将成为下一个c++标准的一部分吗?
- 模板模板参数何时成为标准的一部分?