2012-07-27 50 views
0

可能重复:
Undefined Behavior and Sequence Points中x = GCC(X ++)

我写下面的代码并[让我惊讶]它印: 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; 
} 
+0

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

回答

1

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

+0

除非Jon Skeet回答,否则它会变成一个百万代表问题:p – Matthias 2012-07-27 06:20:17