大家第一时间想到i++与++i的区别就是一个是先加再用,一个是先用再加。
相同点:
#include<stdio.h>
int main()
{
int a = 10;
a < 20;
a++;
printf("%d", a);
return 0;
}
上述代码打开反汇编,显示出来的机器码是这样的

而当我们输入代码
#include<stdio.h>
int main()
{
int a = 10;
a < 20;
++a;
printf("%d", a);
return 0;
}
它所体现出来的反汇编机器码是这样的

会发现在a++与++a没有赋值对象的时候(也就是说单纯的个体a++与++a)是等价的,都是将这个值赋值给CPU寄存器中,然后加1来进行计算的。
不同点:
#include<stdio.h>
int main()
{
int a = 10;
int b = 0;
a < 20;
b=++a;
printf("%d", b);
return 0;
}
它的反汇编机器码:

而:
#include<stdio.h>
int main()
{
int a = 10;
int b = 0;
a < 20;
b = a++;
printf("%d", b);
return 0;
}
反汇编机器码:

总结:
在a++与++a有赋值对象的时候确实一个是先加后用另一个是先用后加。
没赋值对象的时候两者是等价的!
欢迎大家评论区讨论交流,下期再见!
本文通过反汇编分析,揭示了在C++中i++与++i在无赋值对象时的等价性,它们都会先将值加载到CPU寄存器再加1。然而,当涉及到赋值操作时,两者的区别在于先加后用(i++)和先用后加(++i)。通过两个示例代码及其对应的反汇编机器码,作者清晰地展示了这种差异。最后,鼓励读者在评论区讨论交流。
567

被折叠的 条评论
为什么被折叠?



