码迷,mamicode.com
首页 > 编程语言 > 详细

More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式

时间:2015-06-26 09:13:37      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

1. 由于前自增和后自增操作符都是一元运算符,因此重载时通过在后自增中加一个int型参数(哑元参数)加以区分,当后自增被调用时,编译器自动在为该参数指定一个0值。

2. 前自增操作符返回调用它的对象的引用,后自增操作符返回const 临时对象

3. 由于前自增是返回的是原对象的引用,因而可以执行类似于++++a这样的式子;

    但是后自增返回的是调用后自增操作符之前的对象的副本,如果后自增操作符返回的临时对象不是const,那么就可能会出现a++++的现象,而第二个++作用的其实是一个临时对象,这显然背离初衷。c++中有一条原则就是“绝对不让用户更改临时对象”(异常处理除外),因为临时对象是由编译器产生的,我们无法主动使用,同时它的生存期也无法由我们来掌握,所以除了用临时对象来充当传入参数或返回值的"载体"外,任何对临时对象的更改都是无意义的,也就被编译器严厉禁止。

    至于不能将临时对象传入接受非const 引用的函数,也是同样道理。也就是说,除非返回的是引用,否则返回的都是临时对象,而主动对临时对象做任何更改操作(除了异常处理外),都是不允许的!

4. 由于后自增要创建一个对象保存之前对象的副本,所以比前自增效率要低,在两者效果相同的情况下推荐使用前自增。

5. 如果要同时定义前自增和后自增,对后自增的定义最好以前自增为实现基础,这样可以保证它们行为的一致。

More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式

标签:

原文地址:http://www.cnblogs.com/reasno/p/4601376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!