c++ - constexpr std::optional 重置

标签 c++ c++17 constexpr stdoptional

我正在审查 C++-17 std::optional 类模板的接口(interface),并注意到 resetassignment来自 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/

相关文章:

c++ - 在 C++20 获得批准之前,我应该如何处理时代以来的值?

c++ - 将字符串从 Beginning 复制到 End 第 2 部分

c++ - 在 Ubuntu 中选择超时错误 - Opencv

c++ - 有什么方法可以为函数指针模板参数(或某些等效参数)创建静态 const 变量?

c++ - 模板类返回元组或值,取决于参数包

c++ - 基于位置的包中的特定类型

c++ - 具有部分定义类的模板化 constexpr 函数调用会更改后续结果

c++ - 如何决定 constexpr 是否返回引用

c++ - 将静态 constexpr 类成员分配给运行时变量

仅在没有优化的情况下编译时出现 C++ 错误 (GCC)