精通C++:Scott Meyers的《More Effective C++》精髓解析

5星 · 超过95%的资源 需积分: 0 253 下载量 64 浏览量 更新于2024-07-20 2 收藏 1.61MB PDF 举报
"More Effective C++(侯捷).pdf" 是一本由Scott Meyers编写的C++编程指南,中文版由侯捷翻译。这本书聚焦于提高C++编程效率和实践,帮助开发者掌握C++的高级特性,提升代码质量和可维护性。 在译序和导言中,侯捷介绍了C++语言的复杂性和丰富的设计思想,强调了C++的多范式编程(过程式、基于对象、面向对象、泛型编程)以及学习C++的挑战。他还提到,对于有一定C++基础的开发者来说,书中积累的工程实践经验具有极高的价值,特别是Scott Meyers的"Effective C++"系列和Herb Sutter的"Exceptional C++"。 书中的内容分为多个主题,每个主题称为一个Item,涵盖了基础议题、运算符、异常处理、效率优化以及编程技巧等关键知识点: 1. **基础议题**: - Item M1讨论了指针和引用的区别,指出引用的安全性和不可变性。 - Item M2建议尽量使用C++风格的类型转换,以提高类型安全。 - Item M3提醒开发者避免对数组使用多态,因为这可能导致意外的行为。 - Item M4提示应避免无用的默认构造函数,以防止不必要的资源分配。 2. **运算符**: - Item M5警告开发者谨慎定义类型转换函数,以防止潜在的误用。 - Item M6解释了自增和自减操作符的前缀和后缀形式的差异,这对于理解表达式求值顺序至关重要。 - Item M7建议不要重载逻辑运算符"&&"、"||"和逗号运算符,因为它们有特殊的短路行为。 - Item M8阐述了不同形式的new和delete操作符的含义,包括动态内存管理的细节。 3. **异常处理**: - Item M9强调使用析构函数来防止资源泄漏,特别是在异常情况下。 - Item M10指导如何在构造函数中妥善处理资源,以确保即使在异常发生时也能正确清理。 - Item M11解释了如何阻止异常信息传递到析构函数之外,以保持异常安全性。 - Item M12对比了抛出异常与传递参数或调用虚函数的行为差异。 - Item M13推荐通过引用捕获异常,以避免异常对象的拷贝开销。 - Item M14和Item M15讨论了异常规格的使用和异常处理的系统开销。 4. **效率**: - Item M16引入了80-20法则,强调应关注性能瓶颈。 - Item M17提倡懒惰计算(Lazy Evaluation)以减少不必要的计算。 - Item M18介绍了分期摊还期望的计算,以优化性能。 - Item M19探讨了临时对象的产生及其对性能的影响。 - Item M20解释了如何通过优化返回值来提高效率。 - Item M21警告应避免隐式类型转换,以提高代码清晰度和安全性。 - Item M22提倡使用运算符的赋值形式(如`OP=`)替代单独形式(如`OP`),以确保正确的赋值语义。 - Item M23建议根据性能需求考虑替换程序库。 - Item M24揭示了虚拟函数、多继承、虚基类和运行时类型识别(RTTI)的成本。 5. **技巧**(也称为 idioms 或 patterns): - 这部分涉及C++中的一些高级技术,如模板元编程、设计模式等,它们是C++高效编程的关键。 每项议题都深入剖析了C++的一个特定方面,并提供了实用的建议,旨在帮助开发者写出更高效、更健壮的C++代码。通过阅读和实践这些Item,读者可以逐步提升自己的C++编程技能。
2008-11-03 上传
作者 : Scott Meyers 译序、导读 : 侯捷 译序(侯捷) C++ 是一个难学易用的语言! C++ 的难学,不仅在其广博的语法,以及语法背後的语意,以及语意背後的深层思维,以及深层思维背後的物件模型;C++ 的难学,还在於它提供了四种不同(但相辅相成)的程式设计思维模式:procedural-based,object-based,object-oriented,generic paradigm。 世上没有白吃的午餐。又要有效率,又要有弹性,又要前瞻望远,又要回溯相容,又要能治大国,又要能烹小鲜,学习起来当然就不可能太简单。 在如此庞大复杂的机制下,万千使用者前仆後续的动力是:一旦学成,妙用无穷。C++ 相关书籍之多,车载斗量;如天上繁星,如过江之鲫。广博如四库全书者有之(The C++ Programming Language、C++ Primer),深奥如重山复水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),细说历史者有之(The Design and Evolution of C++, Ruminations on C++),独沽一味者有之(Polymorphism in C++, Genericity in C++),独树一帜者有之(Design Patterns,Large Scale C++ Software Design, C++ FAQs),程式库大全有之(The C++ Standard Library),另辟蹊径者有之(Generic Programming and the STL),工程经验之累积亦有之(Effective C++, More Effective C++, Exceptional C++)。 这其中,「工程经验之累积」对已具C++ 相当基础的程式员而言,有著致命的吸引力与立竿见影的帮助。Scott Meyers 的Effective C++ 和More Effective C++ 是此类佼佼,Herb Sutter 的Exceptional C++ 则是後起之秀。 这类书籍的一个共通特色是轻薄短小,并且高密度地纳入作者浸淫於C++/OOP 领域多年而广泛的经验。它们不但开展读者的视野,也为读者提供各种C++/OOP 常见问题或易犯错误的解决模型。某些小范围主题诸如「在base classes 中使用virtual destructor」、「令operator= 传回*this 的reference」,可能在百科型C++ 语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背後的成因、最佳的解法、以及其他可能的牵扯。至於大范围主题,例如smart pointers, reference counting, proxy classes,double dispatching, 基本上已属design patterns 的层级! 这些都是经验的累积和心血的结晶。