难道后缀增量不返回值进行增量?(Does postfix increment perform inc

2019-11-04 11:22发布

同样,一个愚蠢的问题。

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

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

 return 0;
}

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

5.2.6递增和递减[expr.post.incr] 1通过施加后缀++所获得的值是操作数施加操作之前的值。 [注意:得到的值是原始值的副本]

我检查下MS VC 2008和GCC。 他们给这两个相同的结果,但至少gcc的问题增量串警告。 我在哪里错了?

Answer 1:

的行为

i = i++;

是不确定的。 如果一个表达式分配两个不同的值给一个变量时,C ++规范说什么都可能发生 - 它可能需要在其旧值,在所有两个新值中的一个,或几乎任何东西。 这样做的原因是,它允许编译器作出更加积极的简单表达式的优化。 编译器可以重新排列分配和顺序++被执行时,例如,如果它认为它是更有效的。



文章来源: Does postfix increment perform increment not on returned value?