非常简单的代码(在MS Visual C++ 2008 Express下):
#include <iostream>
using namespace std;
int main()
{
for (int a=1; 2*a<=7; a++)
cout << a << endl;
return 0;
}
调试模式给我了 正确 的结果:
1
2
3
然而发布模式却给我带来了错误的结果:
1
2
好的,我理解可能的答案是“使用2*a<8”、“为什么不是a<=3”、“a<4”。
我不想改变代码,因为它是正确的代码(在调试模式下运行良好,所有变量都被很好地初始化等)。
- 你在 Visual C++ 2008 Express 中是否有相同的 bug?
- 在更新版本(2010、2012)中是否存在此 bug?
- 如何避免此 bug?
- 有没有修复它的 SP?
- 也许更改一些编译选项(而不是默认选项)可以解决问题?
更新:
当我写下
cout << a+1 << endl;
或者cout << 2*a << endl;
它正常工作/编译正确(3行输出)。
注意:我在不同的计算机上尝试了VC++2008 Express。行为相同。