奇怪的GCC优化错误

Strange GCC optimisation bug

本文关键字:优化 错误 GCC      更新时间:2023-10-16

我正在编写一个包含许多不同模块的相当大的应用程序。出于调试的明显原因,我一直在编程GCC调试信息,并关闭所有优化。现在,我决定是时候该发布了,并且已经设置了GCC以最好的能力(-O3)进行优化。这是最奇怪的虫子出现的时候。采用以下代码:

void SomeClass::setValue(int i) { this->iValue = i; }
int  SomeClass::getValue() const { return this->iValue; }

现在没有优化,这些都可以完美地发挥作用。具有优化,setValue()方法中未修改SomeClass.iValue 的值。实际上,以下输出:

cout << x.getValue();
x.setValue(5);
cout << x.getValue();

返回

0
0

iValue在类中注入到0时。

现在是奇怪的部分:如果我将以下代码插入setValue()

void SomeClass::setValue(int i) { cout << "Narf"; this->iValue = i; }

代码有效!

有人可以向我解释发生了什么事?

您是否尝试检查cout<<x.iValue;?也许问题在于SomeClass::getValue();中,它返回void还是为const?:)

另外,只是一个想法,优化可能发生在COUT中,而不是cout << "Narf";

所暗示的实际代码

首先,您的代码不是完全正确的。Getter函数应返回int而不是void。我认为您只是在此处错误地键入它,因为GCC不会让您编译(std :: Cout对于类型void没有过载的操作员&lt;&lt;)。此外,SomeClass.i_value也不会编译。您是说this->i_value还是i_value