【More Effective C++】效率
条款十六:80-20法则
20%的代码占用了80%的执行时间、内存等等,因此需要化大部分时间编写
条款十七:缓式评估
利用 区分读写、生成表达式等方式避免立刻计算
条款十八:分期摊还预期的计算成本
超急评估:例如某些容器总是以二倍当前容量扩展。
某些运算的结果不总是需要时利用缓式评估可以改善效率,而结果被多次需要时利用超急评估可以改善效率。
条款十九:了解临时对象的来源
- 匿名对象发生在两种情况:1、函数调用中的隐式转换。2、函数返回对象。
- 临时对象不能被绑定到reference-to-non-const
条款二十:协助完成“返回值优化(RVO)”
- 某些函数(operator *)只能返回对象
- 可以返回constructor arguments(return表达式),利用编译器优化避免临时对象的生成
条款二十一:利用重载技术避免隐式类型转换
如名字所示。
条款二十二:考虑以操作符复合形式取代独身形式
operator+=、 operator-=。。。实现 operator+、 operator-
1 class classA{ 2 public: 3 ... 4 classA& operator+=(const calssA& rhs); 5 classA& operator-=(const calssA& rhs); 6 }; 7 8 //用operator+=实现operator+ 9 const classA operator+(const classA& lhs, const classA& rhs){ 10 return calssA(lhs)+=rhs; 11 } 12 //用operator-=实现operator- 13 const classA operator-(const classA& lhs, const classA& rhs){ 14 return calssA(lhs)-=rhs; 15 }
条款二十三:考虑使用其他程序库
如名字所示。
条款二十四:了解虚函数、多重继承的成本
- 虚函数类含有vtbl,vtbl与类内虚函数的个数有关
- 虚函数类产生的对象含有一个vptr,vptr指向类的vtbl,因此虚函数对象占用内存会多一些。
- 虚函数往往不能被声明为inline,虚函数作用在运行时,而inline发生在编译时。
浙公网安备 33010602011771号