总是优先使用++、--的前缀形式

  编程的时候应该尽可能使用递增操作符 ++ 和递减操作符 -- 的前缀形式.因为它少创建两个临时对象,效率比较高.
还是从代码来分析吧,比较有说服力:)

下面是 ++ 和 -- 的前缀实现形式:
T& T::operator++(){                     T& T::operator--(){
    ++*this;                                --*this;
    return *this;                           return *this;
}                                       }

下面是 ++ 和 -- 的后缀实现形式:
T T::operator++(int){                   T T::operator--(int){
    T old(*this);                           T old(*this);
    ++*this;                                --*this;
    return old;                             return old;
}                                       }

我们来分析一下自增自减的后缀形式所多花费的开销:
    T old(*this);
这一句产生一个类型为T的临时对象 old, 并用原值*this进行初始化.当函数return的时候,又再次创建一个临时对象,并用old的值进行初始,之后,局部变量old被销毁.并用临时创建的变量对赋值符左边的变量进行赋值(如果有的话).赋值后,临时变量再次被销毁.
    而前缀形式的自增自减呢?首先函数内没有创建临时变量,故这方面的开销就节省了.其次,返回的是一个引用,故也节省了这时候创建销毁临时对象的开销.
    因此后缀式的自增自减,所多花费的开销是两次临时变量的创建,以及两次临时变量的销毁.如果自增自减的对象不是内建的数据类型,而一个类类型[当然,你首先得重载自增自减操作符:) ], 那么这个开销可能会比较大.因为变成了两次构造函数以及两次析构函数的调用.
    所以在调用代码的时候,要优先使用前缀形式,除非确实需要后缀形式返回原值.

参考书籍: C++ 编程规范
    作者: Herb Sutter
          Andrei Alexandrescu 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值