首页 > 解决方案 > constexpr std::可选重置

问题描述

我正在查看 C++-17std::optional类模板的接口,并注意到resetand assignmentfromnullopt没有标记为 constexpr。

这是疏忽还是有原因不能将此操作标记为 constexpr?

标签: c++c++17constexprstdoptional

解决方案


有一个原因,那就是[expr.const]以前禁止:

赋值表达式或赋值运算符 ([class.copy]) 的调用将更改联合的活动成员;

由于P1330: 在 constexpr 中更改联合的活动成员,该限制不再存在,这使得所有这些事情更容易实现(该论文实际上只是删除了我上面引用的要点)。

optional复制和移动分配(但没有其他分配)的constexpr原因是因为它们可以默认为普通类型。


推荐阅读