gcc中的x=(x+;+;)

gcc中的x=(x+;+;),gcc,increment,Gcc,Increment,可能重复: 我写了下面的代码并[出乎意料地]打印出来: xx:1 zz:0 我希望xx和zz都打印为0。在linux和darwin上使用GCC4.2、4.4和4.7进行了尝试。经过一些研究,我发现x=x++是未定义的行为,但我希望(x++)首先执行并返回0。有人能解释这种奇怪的编译器行为吗 #include <iostream> using namespace std; int frwd(int aa) { return aa; } int main() { int xx

可能重复:

我写了下面的代码并[出乎意料地]打印出来: xx:1 zz:0

我希望xx和zz都打印为0。在linux和darwin上使用GCC4.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;
}
#包括
使用名称空间std;
int frwd(int aa){return aa;}
int main(){
int xx=0;
xx=(xx++);

cout未定义的行为是未定义的。任何事情都有可能发生。您的问题多次重复。

完整解释:除非Jon Skeet回答,否则它将成为百万次重复的问题:p