我正在编写一个包含许多不同模块的相当大的应用程序。由于显而易见的调试原因,我一直在打开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; }
代码有效!
有人可以向我解释发生了什么事吗?
答案 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
?