c++ primer中推荐使用++i,有什么好处呢?
i++:i首先要创建自身的一个副本,然后i自增1,最后返回值为副本的值。
(i1=i; i=i+1; 返回i1的值)
++i:是将i自增1,然后返回i的值。
(i=i+1;返回i的值)
两者效率问题:
1.在内建数据类型时(即自增表示式的结果没有被使用,只是简单的用于递增操作,比如for循环内部用于循环),这时这两个表达式的效率是相同的。
2.在自定义数据类型时(主要指有类的情况),由于++i可以返回对象的引用,而i++一定要是返回对象的值。可想而知引用的开销当然比直接对对象进行操作要效率高很多,节省很多开销。
前置++和后置++存在本质上的区别:
前置++ 不会产生临时对象
后置++ 在返回时有一个临时对象的创建
在前置++和后置++ 效果相同的时候,最好使用前置++
此外,
i+=1: 事实上相当于++i
i=i+1: 虽然有点雷同于i+=1,但不同的是此时右值的i和1做相加操作,形成一个副本然后赋值给i,所以有额外操作
鉴于i++和++i的差别,C++Primer建议用++i作为for循环的递增量