众所周知的区别
i++和++i的区别应该是众所周知的,每一本c语言和c++的入门教程都会提及:
- 对于i++,编译器会先取得i的值进行计算,然后再进行加1操作
- 而对于++i,编译器会先进行加1操作,然后拿着加1之后的值进行计算
本质区别
参与运算的情况
源代码
int i = 9;
int a = i++;
int b = ++i;
汇编
movl $9, -20(%rbp)
movl -20(%rbp), %edi
movl %edi, %ecx
addl $1, %ecx
movl %ecx, -20(%rbp)
movl %edi, -24(%rbp)
movl -20(%rbp), %ecx
addl $1, %ecx
movl %ecx, -20(%rbp)
movl %ecx, -28(%rbp)
有上面的汇编可知,当++i和i++参与运算时,i++需要先保存一下加1之前的值,所以比++i多执行了一条指令。可以说,对于上面的代码++i效率更高一些。
没有参与运算的情况
源代码
int i = 9;
i++;
++i;
汇编
movl $9, -20(%rbp)
movl -20(%rbp), %edi
addl $1, %edi
movl %edi, -20(%rbp)
movl -20(%rbp), %edi
addl $1, %edi
movl %edi, -20(%rbp)
通过上面的汇编可以看出,在当++i或i++不涉及到运算时,他们的指令是一样的,因此运算的效率是相同的