《More Effective C++》精华要点解读

需积分: 9 2 下载量 151 浏览量 更新于2024-08-02 收藏 1.16MB PDF 举报
"More_Effective_Cpp_cn.pdf" 是一本关于C++编程实践的书籍,由Scott Meyers撰写,侯捷翻译。这本书包含了从基础议题到高级技巧的35个关键知识点,旨在帮助读者提高C++编程的效率和质量。 1. 译序和导读部分由侯捷撰写,为读者提供了本书的背景和阅读指导。 2. 书中讨论的C++涵盖了许多核心概念,如指针、引用、类型转换、多态、运算符重载、异常处理、效率优化等。 3. 关于基础议题,作者强调了指针与引用的不同,推荐使用C++风格的类型转换,指出不应对数组使用多态,以及避免不必要的默认构造函数。 4. 在运算符部分,书中警告读者要谨慎定义类型转换函数,理解自增和自减操作符的前缀和后缀形式的差异,避免重载特定的逻辑运算符,并深入解析了NEW和DELETE操作符的不同用法。 5. 异常处理是C++中的重要主题,作者建议使用析构函数防止资源泄漏,确保构造函数中正确管理资源,禁止异常信息泄露到析构函数之外,理解异常处理与普通函数调用的区别,以及如何有效地捕获和处理异常。 6. 效率方面,书中的建议包括遵循80-20原则,考虑延迟计算,分期摊还计算成本,理解临时对象的生成,支持返回值优化,通过重载避免隐式类型转换,使用运算符赋值形式,以及评估程序库的性能影响。 7. 技巧和模式部分,书中探讨了如何利用C++的特性,如重载避免隐式转换,考虑使用运算符赋值形式替代单独形式,以及评估程序库替换的必要性。此外,还涉及了虚拟函数、多继承、虚基类和运行时类型信息(RTTI)的性能成本。 "More_Effective_Cpp_cn.pdf" 是一本深入探讨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 的层级! 这些都是经验的累积和心血的结晶。