一般默认的可构造std::optional和std::variant
trivially default constructible std::optional and std::variant
是否允许以这样的方式设计std::optional
(当前为std::experimental::optional
),即对于平凡默认可构造类型T
,对应的std::optional< T >
也是平凡默认可构类型?
关于CCD_ 5及其积分鉴别器的同样问题。
我自己的答案是:"不,它不能这样设计,因为如果对象有自动存储持续时间,或者它是从非零初始化存储中reinterpret_cast
,那么在默认初始化过程中获得的积分鉴别器的值将是不确定的。"我不允许用户每次都进行值初始化。
你的答案是正确的:你不能。规范要求其"初始化标志"在默认构造时设置为false
。
正如您自己所解释的,您不能以这种方式实现std::optional,因为您将更改其语义(is_trivially_default_constructible是类接口的一部分)。
然而,如果您在代码中出于某种原因需要这种语义,那么就没有理由不能实现一个非常相似的可选类,该类通常是默认可构造的。然后,当使用时,只需零通过{}初始化它,如果这是您想要的,则在bool运算符中将零视为true。
相关文章:
- 检查某些类型是否是模板类 std::optional 的实例化
- 使用 std::optional,而不是自己的结构
- C++17:使用 std::optional 来评估枚举是否包含值
- 从返回 std::optional of std::vector 的函数中获取结果到调用方
- API 返回智能指针的 std::optional 以明确指定指针可能为 null 是否有意义?
- 函数可以应用于 std::optional,并返回一个可选值吗?
- 为什么 std::optional::value_or 没有默认 ctor 类型的专用化?
- 使用std::optional时的命名返回值优化
- 为什么返回std::optional有时移动,有时复制
- 为什么 std::optional 的强制转换运算符被忽略了
- C++是否在 std::min 和 std::max 下标准化 std::optional 的行为?
- std::optional - 使用 {} 或 std::nullopt 构造空
- 我可以使用 std::optional 进行错误处理吗?
- 为什么在std::optional的某些实现中有一个虚拟工会成员?
- 有什么东西阻止std::optional::value_or()有条件地不例外吗?
- 子类化 std::optional时编译错误
- 如何在构造函数中使用 std::optional
- 函数模板参数推断使用 std::Optional 失败
- 什么时候适合使用 std::optional
- 为什么 std::optional 运算符* 没有 has_value() 的调试模式断言