可能重复:
未定义的行为和序列点
我编写了以下代码,[令我惊讶的是]它打印: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;
}