0

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

代码:

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

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

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

结果:

Text: ☺ 1

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

那么解决方案很简单,它只需要另一条线,但我感兴趣的是知道这是一个编译器错误还是只是 c++ 很奇怪

在 VC10 和 VC11 中测试。

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

4

1 回答 1

0

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

push(pop() * pop());

C++ 没有记录调用的顺序pop()。所以 MSVC 和 GCC 的结果是不同的。你应该打电话一步一步来foo[i]foo[++i]

于 2013-06-19T02:47:50.893 回答