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;
}
完整的解释:[未定义的行为和顺序点](http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points) – 2012-07-27 06:18:48