C/C++不同编译器下自增++(自减--)运算顺序

10 篇文章 3 订阅

编译器是人创造的,不同的人有不同的逻辑,也就导致不同编译器下自增和自减处理逻辑的不同。

举例说明不同编译器下,自增运算符的处理逻辑(自减也是一样的):

int i=3;
int m=3;
int p = (i++)+(i++)+(i++);
int q = (++m)+(++m)+(++m);
 
visual studio中的处理方式:
 
++在变量后面的时候,先处理其他算式,最后再计算++,所以,
p = (i++)+(i++)+(i++)就等价于:
p = i+i+i = 3+3+3=9;
i++;执行3次,i的值变成6
 
 
++在变量前面的时候,先计算++,然后在计算其它部分,所以,
q = (++m)+(++m)+(++m);就等价于:
++m执行3次,m的值变成6
q=m+m+m=6+6+6=18
 
 
在devc/VSCODE中的处理方式:
 
++在变量后面的时候,是边计算边++,所以
p = (i++)+(i++)+(i++);就等于
p = 3 + 4 + 5 = 12;
先用变3替换i,然后执行一次i++,i变成4
然后再用4替换第二个i,然后再执行i++,i变成5
然后在用5替换第三个i,然后执行p=3+4+5=12,最后再执行一次i++
 
 
++在变量前面的时候,计算过程是:
先执行两次++m,m的值变成5,然后执行5+5=10,然后再执行一次++m,m变成6,然后在执行p=10+6=16
 
 

所以,在实际项目中,考虑到项目迁移等问题,建议不要使用连续自增、自减进行运算,这种逻辑问题在项目维护过程中很难被发现和维护。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qfl_sdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值