奇怪的GCC优化错误

时间:2014-01-25 14:41:00

标签: c++ c gcc optimization

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

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

现在没有优化,这些工作完美无缺。 优化 SomeClass.iValue方法中setValue() 的值未修改。实际上,输出如下:

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

返回

0
0

iValue在班级中初始化为0时。

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

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

代码有效!

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

2 个答案:

答案 0 :(得分:2)

你试过检查cout<<x.iValue;了吗?或许问题出在SomeClass::getValue();,例如,它返回void还是const? :)

另外,只是一个想法,优化可能发生在cout而不是cout << "Narf";提示的实际代码

答案 1 :(得分:1)

首先,您的代码并不完全正确。 Getter函数应该返回int而不是void。我想你只是在这里输入错误,因为gcc不会让你编译它(std :: cout没有重载运算符&lt;&lt; for type void)。更重要的是,SomeClass.i_value也没有编译。您的意思是this->i_value还是i_value