0

可能重复:
未定义的行为和序列点

我编写了以下代码,[令我惊讶的是]它打印:xx:1 zz:0

我本来希望 xx 和 zz 都打印为 0。这在 linux 和 darwin 上使用 gcc 4.2、4.4 和 4.7 进行了尝试。经过一些研究,我发现 x=x++ 是未定义的行为,但我希望 (x++) 首先执行并返回 0。有人可以阐明这种奇怪的编译器行为吗?

#include <iostream>
using namespace std;

int frwd(int aa) { return aa; }

int main() {
  int xx = 0;
  xx = (xx++);
  cout << "xx:" << xx << endl;

  int zz = 0;
  zz = frwd(zz++);
  cout << "zz:" << zz << endl;
}
4

1 回答 1

1

未定义的行为是未定义的。什么事情都可能发生。您的问题多次重复。

于 2012-07-27T06:17:38.533 回答