Visual Studio预增量错误

时间:2013-06-19 02:33:29

标签: c++ visual-studio

在我的代码上发现了一个奇怪的行为。

代码:

char foo[] = {64, 1};
int i = 0;

char c = ((foo[i]) | (foo[(++i)]));

cout << "Text: " << c << " " << (int)c << endl;

结果:

Text: ☺ 1

我演的是“Text:A 1”而不是“Text:☺1”。由于某种原因,编译器忽略了“| foo [++ i]”部分。

对此的解决方案非常简单,它只需要另一行,但我感兴趣的是知道这是编译器错误还是只是c ++很奇怪

在VC10和VC11中测试。

编辑:在代码中添加了(),仍然是相同的行为。

1 个答案:

答案 0 :(得分:0)

C ++标准中没有记录表达顺序(不是格式良好的公式)。它取决于编译器行为。例如:

push(pop() * pop());

C ++没有记录调用pop()的顺序。因此MSVC和GCC的结果不同。您应该逐步致电foo[i]foo[++i]