我正在审查 C++-17 std::optional
类模板的接口(interface),并注意到 reset
和 assignment
来自 nullopt
的未标记为 constexpr。
这是一个疏忽还是无法将此操作标记为 constexpr 的原因?
最佳答案
有一个原因,就是[expr.const]以前禁止:
an assignment expression or invocation of an assignment operator ([class.copy]) that would change the active member of a union;
由于 P1330: Changing the active member of a union inside constexpr,该限制不再存在,这使得所有这些事情更容易实现(这篇论文实际上只是删除了我上面引用的要点)。
optional
的复制和移动赋值(但没有其他赋值)是 constexpr
的原因是因为它们只能为普通类型设置默认值。
关于c++ - constexpr std::optional 重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876261/