奇怪的GCC优化错误
Strange GCC optimisation bug
我正在编写一个包含许多不同模块的相当大的应用程序。出于调试的明显原因,我一直在编程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
?
相关文章:
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 是视觉C++优化器错误还是我的代码中有错误?
- SSE 内联汇编和可能的 g++ 优化错误
- 静态局部变量会被错误地优化吗?
- G 4.8.5带负数组索引的循环优化错误
- 未定义的行为或 gcc 优化错误
- 视觉C++ 2017 错误?编译器优化表达式
- 在NDK中启用链接时间优化时,链接器错误
- C1001反量时间的错误(无优化)
- 在VS2017中编译错误C2027,但没有小对象优化
- GCC6.X.中的ConstexPR优化错误
- 优化标志会导致计算错误
- 奇怪的GCC优化错误
- 如何消除只在启用优化的情况下出现的错误
- visual c++中,没有编译器优化的数字代码会给出错误的结果
- C++ 模板的 Clang 优化错误
- LLVM编译器优化错误或什么
- 在osx上使用-O3的g++优化错误
- 这是一个gcc优化错误吗?
- gcc优化错误或违反c++规则