后缀增量是否执行增量而不是返回值?

时间:2011-01-08 23:38:29

标签: c++ standards post-increment

再次,一个愚蠢的问题。

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

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

 return 0;
}

我得到1作为此程序的结果打印虽然我预期0:首先创建的临时对象等于0,然后i递增,然后返回临时对象并分配给i。只是根据:

  

5.2.6递增和递减[expr.post.incr]   1获得的价值   通过应用postfix ++是值   申请前的操作数   运营商。 [注意:价值   获得的是原件的副本   价值]

我在MS VC 2008和GCC下查了一下。它们给出了相同的结果,但至少gcc在递增字符串中发出警告。我哪里错了?

1 个答案:

答案 0 :(得分:0)

的行为
i = i++;

未定义。如果单个表达式为变量分配两个不同的值,那么C ++规范说任何事情都可能发生 - 它可以采用它的旧值,两个新值中的一个,或几乎任何东西。这样做的原因是它允许编译器对简单表达式进行更积极的优化。编译器可以重新排列赋值和++的执行顺序,例如,如果它认为它更有效。

相关问题