标签
内容简介
《More Effective C++中文版》是 Scott Meyers 继《Effective C++》之后推出的姊妹篇,全书以 35 个条款,系统总结在真实工程中改善 C++ 程序设计与实现的实用经验。全书按主题分为六大部分:基础议题(指针与引用、C++ 风格类型转换、多态数组、默认构造函数)、操作符(自定义类型转换、自增自减的前置与后缀形式、&&/||/逗号操作符重载、new 与 delete 的多重含义)、异常(用析构函数与构造函数管理资源、阻止异常逃出析构函数、按引用捕获异常、异常规格和异常处理成本)、效率(80-20 法则、缓式评估、分摊计算成本、临时对象来源、返回值优化、重载与程序库选择、虚函数与多重继承、RTTI 的开销)、技术(虚化构造函数与非成员函数、限制对象数量、堆与栈对象的管理、智能指针、引用计数、代理类、基于多个对象类型的虚函数)以及杂项(面向未来编程、将非尾端类设计为抽象类、C++ 与 C 混用、熟悉语言标准)。每个条款先给出准则,再解释这条准则成立的原因、违反之后的后果,以及哪些情况下可以合理地打破它。书中讨论的 C++ 标准与今日规范基本一致,所讲的陷阱与手法至今仍然是理解 RAII、异常安全、对象生命周期和高级设计技巧的重要参照。
编辑推荐
这不是一本按部就班的 C++ 教材,而更像一位资深工程师坐在你旁边,告诉你哪些看似正确的写法在编译器眼里会变成另一回事。35 个条款,条条都有代价:一个默认构造函数、一次隐式转换,甚至一行析构函数都可能埋下资源泄漏或未定义行为。作者 Scott Meyers 的行文干净利落,先抛准则,再讲原因,最后说明什么情况下可以破例,读起来几乎没有废话。侯捷的译文保留了英文术语,并加了译注与交叉索引,对习惯中英混读的程序员非常友好。本书讨论的虽是一个已经稳定的语言时代,但 RAII、异常安全、智能指针、代理类、双重分派这些概念正是现代 C++ 的资源管理与设计手法的源头。看懂它,很多现代库为何如此设计,也就有了答案。适合在读完入门书、写出一两个真实项目后反复翻看。
适合谁读
适合
- 已系统学过 C++ 语法、写过实际项目、希望进阶的中级程序员。
- 读过《Effective C++》,想继续补齐异常安全与效率议题的读者。
- 需要理解 RAII、智能指针、代理类等设计手法来源的架构或库开发者。
- 准备 C++ 进阶面试、需要系统梳理语言陷阱的求职者。
不适合
- 完全零基础、尚未掌握类、继承、模板与引用的初学者。
- 只想学语法速成、不愿深究语言机制与代价的读者。
- 只写 Python、Java 等托管语言且不接触 C++ 资源管理的人。
阅读建议
- 先通读目录,把自己遇到过的条款标记出来,再逐条精读并动手复现代码。
- 每读完一组条款(如异常、效率),在自己的项目里查找对应写法,建立问题清单。
- 不必按顺序读;可先读第 1–8 条基础议题,再跳到最感兴趣的技术章节。
- 遇到旧式 auto_ptr、异常规格等内容,对照现代 C++11 之后的替代方案做笔记。
出版社简介
电子工业出版社
中国 · 成立于 1982 年
电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。
目录
- 译序(侯捷)
- 导读
- 基础议题
- 条款1:仔细区别 pointers 和 references
- 条款2:最好使用 C++ 转型操作符
- 条款3:绝对不要以多态方式处理数组
- 条款4:非必要不提供 default constructor
- 操作符
- 条款5:对定制的“类型转换函数”保持警觉
- 条款6:区别 increment/decrement 操作符的前置和后置形式
- 条款7:千万不要重载 &&、|| 和 , 操作符
- 条款8:了解各种不同意义的 new 和 delete
- 异常
- 条款9:利用 destructors 避免泄漏资源
- 条款10:在 constructors 内阻止资源泄漏
- 条款11:禁止异常流出 destructors 之外
- 条款12:了解“抛出一个 exception”与“传递一个参数”或“调用一个虚函数”之间的差异
- 条款13:以 by reference 方式捕捉 exceptions
- 条款14:明智运用 exception specifications
- 条款15:了解异常处理的成本
- 效率
- 条款16:谨记 80-20 法则
- 条款17:考虑使用 lazy evaluation 缓式评估
- 条款18:分期摊还预期的计算成本
- 条款19:了解临时对象的来源
- 条款20:协助完成返回值优化(RVO)
- 条款21:利用重载技术避免隐式类型转换
- 条款22:考虑以操作符复合形式(op=)取代其独身形式(op)
- 条款23:考虑使用其他程序库
- 条款24:了解 virtual functions、multiple inheritance、virtual base classes、RTTI 的成本
- 技术
- 条款25:将 constructor 和 non-member functions 虚化
- 条款26:限制某个 class 所能产生的对象数量
- 条款27:要求(或禁止)对象产生于 heap 之中
- 条款28:Smart Pointers(智能指针)
- 条款29:Reference counting(引用计数)
- 条款30:Proxy classes(替身类、代理类)
- 条款31:让函数根据一个以上的对象类型来决定如何虚化
- 杂项讨论
- 条款32:在未来时态下发展程序
常见问题
这本书和《Effective C++》有什么区别?
《Effective C++》偏重类设计与常用编码准则,本书是它的姊妹篇,选材更进阶,重点在异常、效率、智能指针、引用计数、代理类与双重分派等技术;作者建议先读前者。
书中的内容过时了吗?
书中依据的是 1990 年代后期的 C++ 标准草案,与今日规范基本一致,auto_ptr 等少数具体做法已被新标准取代,但关于异常安全、对象生命周期与效率的推理仍然有效,阅读时对照现代替代方案即可。
中文版译者是侯捷吗?
是。侯捷翻译的版本最早由华中科技大学出版社、中国电力出版社等出版,2011 年电子工业出版社推出《More Effective C++:35个改善编程与设计的有效方法(中文版)》,ISBN 为 9787121125706。
需要先学模板和异常才能读吗?
作者在导读中假设读者已了解类、继承、虚函数与模板、异常的基本概念;若完全没接触过异常,可先看第 9–15 条,那里对异常机制有较完整的铺垫。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。