Does postfix increment perform increment not on returned value?

只愿长相守 提交于 2019-12-11 18:26:39

问题


Again, a silly question.

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
 int i = 0;
 i = i++;
 cout<<i;

 return 0;
}

I get 1 printed as a result of this program though I expected 0: first a temp object created eing equal 0, then i is incremented, then temp object is returned and assigned to i. Just according to:

5.2.6 Increment and decrement [expr.post.incr] 1 The value obtained by applying a postfix ++ is the value that the operand had before applying the operator. [Note: the value obtained is a copy of the original value ]

I checked it under MS VC 2008 and GCC. They give both the same result, though at least gcc issues a warning in incrementation string. Where am I wrong?


回答1:


The behavior of

i = i++;

is undefined. If a single expression assigns two different values to a variable, the C++ spec says that anything can happen - it could take on its old value, one of the two new values, or pretty much anything at all. The reason for this is that it allows the compiler to make much more aggressive optimizations of simple expressions. The compiler could rearrange the order in which the assignment and ++ are executed, for example, if it thought it were more efficient.



来源:https://stackoverflow.com/questions/4636805/does-postfix-increment-perform-increment-not-on-returned-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!