i=i++ 到底发生了什么?

在java和C++中都支持++操作,那么当执行i=i++时到底发生了什么呢?

1
2
3
4
int i = 0;
for(int j = 0; j < 3; j++){
i = i++;
}

这段代码执行之后,i的值为多少?

以c++为例,在不同版本的编译器下获得的结果是不一样的!因为在标准中,指明了,i=i++这种行为的结果是未定义的。

在gcc 4.8下:

i的值应该为0

在gcc 4.6 以及vs2010下:

i的值应该为3