精通C++:优化与提升
需积分: 10 131 浏览量
更新于2024-07-23
收藏 1.43MB PDF 举报
"More Effective C++ 中文版" 是一本由 Scott Meyers 撰写,侯捷翻译的C++进阶书籍,旨在帮助读者优化C++代码,提高代码效率。书中的内容涵盖基础议题、运算符、异常处理、效率提升以及编程技巧等多个方面。
1. **基础议题**
- ITEM M1:指针与引用的区别 - 引用是安全的别名,而指针可以为空,两者在使用时有不同的语义和注意事项。
- ITEM M2:尽量使用C++风格的类型转换 - 避免使用旧式的C风格类型转换,如 `(type)expr`,推荐使用 `static_cast`,`dynamic_cast`,`const_cast` 和 `reinterpret_cast`。
- ITEM M3:不要对数组使用多态 - 因为数组没有虚函数,无法实现运行时多态性,应使用动态分配的对象数组或者容器如 `std::vector`。
- ITEM M4:避免无用的缺省构造函数 - 有时默认构造函数会导致不必要的对象初始化,根据需要选择是否声明。
2. **运算符**
- ITEM M5:谨慎定义类型转换函数 - 自定义类型转换可能导致意外行为,除非必要,应避免定义。
- ITEM M6:自增(INCREMENT)、自减(DECREMENT)操作符前缀形式与后缀形式的区别 - 前缀形式直接改变对象值,而后缀形式先返回旧值再改变。
- ITEM M7:不要重载“&&”,“||”,或“,” - 这些运算符有特殊的短路逻辑,重载可能引入混淆。
- ITEM M8:理解各种不同含义的NEW和DELETE - 区分堆内存的分配与释放,注意匹配new[]和delete[]。
3. **异常**
- ITEM M9:使用析构函数防止资源泄漏 - 析构函数确保资源在对象销毁时得到正确清理。
- ITEM M10:在构造函数中防止资源泄漏 - 如果构造失败,应立即释放已分配的资源。
- ITEM M11:禁止异常信息(EXCEPTIONS)传递到析构函数外 - 析构函数不应抛出异常,确保异常安全。
- ITEM M12:理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异 - 抛出异常会改变控制流,可能导致对象状态不一致。
- ITEM M13:通过引用(REFERENCE)捕获异常 - 异常处理时捕获异常对象的引用,以避免复制开销。
- ITEM M14:审慎使用异常规格(EXCEPTIONSPECIFICATIONS) - 异常规格可能导致编译器强制执行过于严格的检查。
- 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. **技巧(TECHNIQUES,又称IDIOMS或PATTERNS)**
- 书中这部分内容可能涵盖了常见的C++设计模式和最佳实践,如工厂方法、策略模式等,用于解决特定问题和提升代码质量。
这本书深入探讨了C++的许多高级主题,对于想要提升C++编程技能的开发者来说是一份宝贵的资源。通过学习和应用书中的知识点,开发者可以写出更高效、更健壮的C++代码。
123 浏览量
2018-09-27 上传
2008-11-14 上传
2011-06-11 上传
2008-12-10 上传
2010-12-08 上传
984 浏览量
maker2000
- 粉丝: 0
- 资源: 1
最新资源
- C# 开发经验 40种窗体常用代码
- 数据库考纲详解(绝对正确)
- 基于敏捷软件开发方法的基金管理信息系统开发
- 中国移动笔试试题及答案
- ARM嵌入式入门级教程
- 2009年研究生入学考试计算机统考大纲-完整版.pdf
- c#北大青鸟经典教程
- (2009 Wiley)LTE for UMTS:OFDMA and SC-FDMA Based Radio Access
- Proteus元件中英文名对照
- XML开发实务.pdf
- FFT算法的一种FPGA实现
- linux学习资料.pdf
- 有关TCP、Ip的嵌入式知识
- 达内面试笔记,分享(C++、Java).pdf
- DIV+CSS布局大全
- Linux的进程管理.doc