gpt4 book ai didi

c++ - constexpr 上下文中的 std::optional 赋值运算符

转载 作者:可可西里 更新时间:2023-11-01 16:39:46 28 4
gpt4 key购买 nike

我在 std::optional 上摸不着头脑,根据 the docs , 不应有 constexpr 赋值运算符。

但是,当我在 gcc-8.1 中尝试这个片段时,它编译并工作得很好:

constexpr std::optional<int> foo() {
std::optional<int> bar = 3;
bar = 1337;
return bar;
}

constexpr auto z = foo();

有什么我想念的吗?

最佳答案

这似乎是 gcc 中的一个错误。我刚刚在 clang-6.0 中尝试过,编译失败并出现预期错误。此外,该标准没有提及赋值运算符的任何 constexpr 重载,因此我会将此错误报告给 gcc bugtracker。

Link to the bug report


编辑:

原来这不是gcc的bug,而是标准的错误:

I don't understand how the code snippet can work in a constexpr context when the current c++17 standard doesn't specify any constexpr assignment operator.

没错,但标准被打破了。

所有实现都将赋值运算符定义为默认值,因此编译器将其设为 constexpr。

事实上P0602R3提案是相关的,因为它将要求实现将运算符定义为默认值(为了简单),因此编译器总是会使其成为 std::optional 的 constexpr。

我已经向标准委员会提出了这个问题。

您可以在 the bug report 中阅读更多相关信息.

关于c++ - constexpr 上下文中的 std::optional 赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920975/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com