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

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

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

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
 
 

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

你可能感兴趣的:(C++,C语言,c++,c语言)