关于自增运算符号的问题!

发布时间:2024-11-08 02:59 发布:上海旅游网

问题描述:

int i=0;
i=i++;
输出的i为什么是0呢。先副职后计算,难道i++先副职,然后直接输出啦,然后i才进行自增,还是前后进行了两次副职呢,首先是i++先复制等于0给了i,然后进行++运算。i=1,然后因为i++是0所以又把i最后副职成了0之后输出了呢,希望大哥们帮我解答,非常感谢!

问题解答:

//这样应该比较容易理解
int i=0;
int temp=i++;//将i的值赋给temp然后自增
i=temp; //所以i的值没有变

1.i++;(是使用i之后,再使i的值加1)
2.i = i++;(对于这个表达式,它有二个运算符,=和++,由于++运算符的优先级高于=,所以先计算i++,根据第一步,它是先使用,再自增1,也就是先把0赋给左边的i,再使i的值加1,在这个语句之后,如果你写一个printf打印出这个i的话,i的值是1,)
int i=0;
i=i++;
printf("%d\n", i);/*这时打印出1,因为上一句i是先使用,后自增1的*/

可参考运算符重载, 后缀自增的标准写法大概是这样:
const Int Int::operator++(int)
{
Int temp = *this;
*this = *this + 1;
return temp;
}

虽然int的++不是函数, 但是流程是一样的.
容易看出是先自增, 再返回自增前的值.

++的优先级高于=,所以算++,++后的值仍为0,再把0的值赋给i后,i就为0了。

热点新闻