《More Effective C++》深度解析: Scott Meyers的C++编程精华

5星 · 超过95%的资源 需积分: 3 37 下载量 179 浏览量 更新于2024-08-02 收藏 2.39MB PDF 举报
"More Effective C++中文pdf" 《More Effective C++》是Scott Meyers的一部经典著作,作为《Effective C++》的续篇,这本书在1996年出版,面向的是已经对C++有一定了解的程序员。Meyers在本书中深入探讨了更高级的C++编程技术和设计模式,包括虚拟构造函数、智能指针、引用计数、代理类以及双重分派等。尽管出版时间较早,但内容基本符合当时已经接近定案的C++标准,与当前的C++标准差别不大。 书中包含了35个条款,每个条款都详细阐述了一个特定的主题。比如: - ITEM M1讲解了指针和引用之间的区别,强调了引用的安全性和不可为空性。 - ITEM M2建议尽量使用C++风格的类型转换,以提高代码的清晰度和安全性。 - ITEM M3提醒我们避免对数组使用多态,因为多态通常与对象的动态特性有关,而数组不支持动态特性。 - ITEM M4指出应避免无用的默认构造函数,以防止不必要的对象初始化。 在运算符方面,Meyers探讨了: - ITEM M5谨慎定义类型转换函数,因为过度使用可能导致意外行为。 - ITEM M6解释了自增和自减操作符前缀和后缀形式的差异,强调了它们在语义上的微妙区别。 - ITEM M7警告不要重载逻辑运算符"&&"、"||"和逗号运算符",",因为这些运算符有特殊的短路行为和结合性。 - ITEM M8详细阐述了NEW和DELETE操作符的不同用途和潜在问题,如配对使用和内存管理。 关于异常处理,Meyers提出: - ITEM M9提倡在析构函数中处理资源释放,以防止异常情况下资源泄漏。 - ITEM M10提醒我们在构造函数中预防资源泄漏,确保即使构造失败也能正确清理。 - ITEM M11禁止异常信息传递到析构函数之外,保持异常安全性。 - ITEM M12解释了抛出异常与传递参数或调用虚函数之间的差异,强调异常的非局部性。 - ITEM M13建议通过引用捕获异常,以避免异常对象的拷贝成本。 - ITEM M14和M15讨论了异常规格和异常处理的性能影响。 书中还涉及了效率提升的策略,如: - ITEM M16提出的80-20准则,提醒我们关注程序性能的关键部分。 - ITEM M17介绍了延迟求值(懒惰计算法)以减少不必要的计算。 - ITEM M18阐述了预期计算的概念,帮助优化性能。 - ITEM M19探讨了临时对象的产生及其影响。 - ITEM M20讨论了如何协助编译器进行返回值优化,减少复制开销。 - ITEM M21通过重载避免隐式类型转换,防止意外的类型转换行为。 - ITEM M22推荐使用运算符赋值形式替代单独的运算符形式,以提高代码的可读性和安全性。 - ITEM M23提出了改变程序库的考虑,以适应更好的设计。 - ITEM M24分析了虚拟函数、多继承、虚基类和运行时类型信息(RTTI)的成本,帮助开发者权衡使用它们的利弊。 最后,第五章"技巧"(Techniques,也称为Idioms或Patterns)是本书的亮点,它涵盖了如虚拟构造函数、智能指针、引用计数等高级设计模式,这些都是C++编程中的重要实践。 《More Effective C++》是一本深入C++编程实践和设计模式的宝贵资源,对于任何想要提升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 的层级! 这些都是经验的累积和心血的结晶。