请考虑以下代码:
#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;
}
在我看来,这是打印相同值的两种等效方法,但我得到的结果是这样的(在GCC 7.3.0中,在MinGW下):
c = 0
A.b = 2
我希望c
是2。有人能解释为什么它是0吗?
1条答案
按热度按时间icomxhvb1#
正如@StoryTeller-UnslanderMonica提到的,这是一个GCC bug。我在godbolt.com上测试了几个版本。下面是我的发现:
我用
-O3
编译,用-O0
测试了 * 一些 *,优化级别在我测试的地方没有什么不同。我不确定在哪里可以找到bug票证。Here's a link to the change summary for GCC 9 versions和Here's a link to the bugzilla tickets resolved by 9.5。我没有看到任何看起来完全匹配的内容。可能是我错过了它,或者票证没有被放在列表中(更改摘要页提到了一种可能性)。
此列表可能不完整(也就是说,某些已修复的PR可能未在此处列出)。