"More Effective C++.pdf 是一本深入探讨C++编程实践的书籍,由Michael S. Feathers撰写,侯捷翻译。这本书旨在提升C++程序员的技能,讲解了35个关键知识点,涵盖了基础议题、运算符、异常处理、效率优化以及编程技巧等多个方面。"
1. 指针与引用的区别:书中指出,尽管指针和引用都可作为别名使用,但引用一旦初始化就不能改变引用的对象,而指针可以重新赋值。此外,引用没有空值状态,而指针可以是NULL。
2. 类型转换:作者建议尽量使用C++风格的类型转换,如static_cast,dynamic_cast,reinterpret_cast和const_cast,以增加代码的清晰度和安全性。
3. 多态与数组:多态通常用于对象的动态绑定,但对数组使用多态可能导致意外的行为,因为数组不支持动态绑定。
4. 缺省构造函数:避免无用的缺省构造函数可以防止不必要的资源分配,特别是当类涉及资源管理时。
5. 类型转换函数:谨慎定义类型转换函数,因为它们可能导致隐式转换,从而引起意料之外的结果。
6. 自增自减操作符:前缀和后缀形式有不同的语义,前缀操作符首先更新值再返回结果,而后缀操作符先返回原值再更新。
7. 禁止重载逻辑运算符:重载"&&","||"和","可能导致预期外的行为,因为它们有特殊的短路语义。
8. new和delete的理解:理解new和delete的不同形式,包括new[]和delete[],以及配对使用,防止内存泄漏。
9. 异常处理:在析构函数中处理资源泄漏,确保即使在异常情况下也能正确清理。同时,禁止异常信息传递到析构函数外部,以保持异常安全。
10. 80-20法则:关注那些占性能问题80%的关键20%,优先优化这些部分。
11. 懒惰计算法:考虑延迟计算直到真正需要时,以提高效率。
12. 分期摊还期望的计算:优化策略的一种,预先计算部分结果,然后在后续使用中逐步完成计算。
13. 临时对象:理解何时和如何产生临时对象,以及如何减少它们的影响。
14. 返回值优化:协助编译器进行返回值优化,减少复制开销。
15. 避免隐式类型转换:通过重载避免不必要的类型转换,提高代码的清晰性和安全性。
16. 运算符赋值形式:考虑使用运算符的赋值形式,如op=,以实现更安全和高效的操作。
17. 程序库变更:在性能或功能需求变化时,考虑更换或修改使用的程序库。
18. 虚函数、多继承、虚基类和RTTI的代价:理解这些特性带来的运行时开销,谨慎使用。
19. 技巧与模式:书中介绍了一些常见的C++编程技巧,如虚拟化构造函数和限制类对象的数量,以提升设计的灵活性和安全性。
该书通过这些具体议题,帮助读者提升C++编程技能,理解语言的深层面,并提供实际可应用于项目中的建议。