在我的代码上发现了一个奇怪的行为。
代码:
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中测试。
编辑:在代码中添加了(),仍然是相同的行为。
答案 0 :(得分:0)
C ++标准中没有记录表达顺序(不是格式良好的公式)。它取决于编译器行为。例如:
push(pop() * pop());
C ++没有记录调用pop()
的顺序。因此MSVC和GCC的结果不同。您应该逐步致电foo[i]
和foo[++i]
。