效率(条款16-24)

这部分内容讲解的是如何提高程序的效率,主要是讲解了一些思想,不涉及具体技术细节。有些条款内容不需要详细阅读,理解思想即可。·

条款16:谨记80-20法则

一个程序80%的资源用于20%的代码身上。程序员要关注20%的关键代码。

条款17:考虑使用lazy evaluation(缓式评估)

需要new的时候再new一个对象,不要提前申请内存

需要从数据库读的时候再读,不要提前读好

需要计算的时候再计算,不要提前计算好结果

个人理解:正常码代码的时候不需要考虑什么lazy evalutaion,当程序需要优化的时候再考虑。

条款18:分期摊还预期的计算成本

和条款17形成比对,这个条款的意思是eager evaluation。提前准备好资源,需要的时候立刻使用。其实就是用时间换空间,还是用空间换时间的问题。比如单例模式中的饿汉模式还是懒汉模式,就是一个经典案例。

条款19:了解临时对象的来源

1)隐式类型转换

2)函数返回对象的时候

结论:临时对象可能会很耗成本,应尽可能消除他们。更重要的是,训练发现临时对象的眼力,任何时候,看到一个reference-to-const参数,就极可能有一个临时对象被产生出来绑定到该参数。

条款20:协助完成“返回值优化(RVO)”

如果函数必须要返回一个对象的时候:

1)不要创建一个局部变量,再return这个局部变量

2)考虑用内联函数来返回值

错误的写法:

class Rationale{....};

const Rational operator*(const Rational& lhs, const Rational& rhs){

Rational result(...);

return result;//这种是典型错误案例,会有临时变量产生,增加构造析构的成本

正确的写法:

inline const Rational operator*(const Rational& lhs, const Rational& rhs){

return Rational result(...);//编译期会进行优化,规避临时变量

}

条款21:利用重载技术(overload)避免隐式类型转换(implicit type conversions)

除非重载大量函数有好处,比如提高程序的效率,否则没必要增加一大堆重载函数。

条款22:考虑以操作符复合形式(op=)取代其独身形式(op)

int a,b,c,d;

int result = a+b+c+d;//效率低,因为有临时变量的产生,如果abcd是复杂的数据类型会消耗时间

int result;

result +=a;        result +=b;        result +=c;        result +=d;//效率高,没有临时变量

上面2中写法的细微效率差异,写一些数学线性代数算法程序的人会考虑吧。

条款23:考虑使用其他程序库

没啥可写的

条款24:了解virtual functions、multiple inheritance、virtual base classes、runtime type identification

写的挺好,并给了一个参考文献Inside the C++ Object Model(by Standley B. Lippman, AQ 1996)第3、4、7章,或《多态与虚拟》(侯捷、松岗,1998)第2版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值