为什么说 ++i 的效率比 i++ 高?

2019-09-24 14:21:01 浏览数 (1)

i与i 的区别

这两个表达式从我们初学编程语言的时候就会接触到。前者是自增后取值,后者是取值后自增。

运行结果:

对于这个结果我们并不感到意外。

另外我们还注意到另外一个有意思的现象:

编译后报错:

说&作用于左值,也就是说a 的结果并非左值。但 b的结果是左值。

可简单理解左值和右值:

1.左值,有名对象,可赋值

2.右值,临时对象,不可被赋值

运算符重载

仔细观察后,我们发现前置自增,先自增,后返回原对象的对象;没有产生任何临时对象;而后置自增,先保存原对象,然后自增,最后返回该原临时对象,那么它就需要创建和销毁,这样一来,效率孰高孰低就很清楚了。

在不进行赋值的情况下,内置类型前置和后置自增的汇编都是一样的呢!

汇编:

不过,赋值的情况下,并且不开启编译器优化,它们的汇编代码还是有差别的,有兴趣的可以试试。

总结

对于内置类型,前置和后置自增或者自减在编译器优化的情况下,两者并无多大差别,而对于自定义类型,如无特别需要,人们似乎更加偏爱前置自增或自减,因为后置自增常常会产生临时对象。

但是,又能提高多少效率呢?

0 人点赞