考虑这段代码:
#include<iostream>
struct A
{
int b;
};
int main()
{
int c = (A() = A{2}).b; // Why is c zero after this?
std::cout << "c = " << c << std::endl;
std::cout << "A.b = " << (A() = A{2}).b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这是打印相同值的两种等效方法,但我得到了这个结果(在 MinGW 下的 GCC 7.3.0 上):
c = 0
A.b = 2
Run Code Online (Sandbox Code Playgroud)
我本来期望c是2。谁能解释为什么它是0?
小智 1
正如@StoryTeller-UnslanderMonica 提到的,这是一个 GCC 错误。我在 godbolt.com 上测试了几个版本。这是我发现的:
我用 进行了编译-O3,并用进行了一些-O0测试,优化级别在我测试的地方没有产生影响。
我不知道在哪里可以找到错误票。这是 GCC 9 版本的更改摘要的链接,这是 9.5 解决的 bugzilla 票证的链接。我没有看到任何看起来完全匹配的东西。要么我错过了,要么票没有被放入该列表中(更改摘要页面提到了这种可能性)。
此列表可能不完整(即,某些已修复的 PR 可能未在此列出)。