转载请注明转载链接
语法
i++,先运算,后赋值
++i,先赋值,后运算
代码执行过程
i++在java和C中的代码执行过程:取出i,复制i,增加i,返回副本;
++i在java和C中的代码执行过程:取出i,增加i,返回i;
分析
从这里看似乎是++i效率更高一点。
所以为了写出效率更高的C语言程序,以后是不是应该尽量使用 ++i,而不是 i++ 了呢?
例如下面这样的C语言代码:
for(i=0; i<10; i++);
for(i=0; i<10; ++i);
是不是上面那行代码的执行效率低于下面的呢?
只能说理论如此,实际上,现代C语言编译器和java语言编译器已经足够聪明,它会根据上下文编译语言代码。
结论
i++ 和 ++i 的效率差异主要来自于处理 i++ 时,需要先保存 i 的当前值留作稍后使用。如果之后没有使用 i 的当前值,编译器实在没有必要保存 i 的当前值了,因此就会将这一步优化掉。
小结
i++ 和 ++i 的区别可能带来效率上的差异。对于i++如果之后的代码需要获取 i++ 执行时的 i 当前值,程序在对 i 进行自加操作时,将不得不先保存 i 的当前值;而 ++i 就无需保存当前值,这就会带来效率上的差异。如果之后的代码不需要获取i++执行时i的当前值,那么现代大多数C语言编译器和java语言编译器将会将这一差异优化掉,此时 i++ 和 ++i 不再有效率上的差异。