我正在查看 C++-17std::optional
类模板的接口,并注意到reset
and assignment
fromnullopt
没有标记为 constexpr。
这是疏忽还是有原因不能将此操作标记为 constexpr?
我正在查看 C++-17std::optional
类模板的接口,并注意到reset
and assignment
fromnullopt
没有标记为 constexpr。
这是疏忽还是有原因不能将此操作标记为 constexpr?
有一个原因,那就是[expr.const]以前禁止:
赋值表达式或赋值运算符 ([class.copy]) 的调用将更改联合的活动成员;
由于P1330: 在 constexpr 中更改联合的活动成员,该限制不再存在,这使得所有这些事情更容易实现(该论文实际上只是删除了我上面引用的要点)。
的optional
复制和移动分配(但没有其他分配)的constexpr
原因是因为它们可以默认为普通类型。