More Exceptional C++(中文版)

(美)舒特 著, 於春景 译

出版时间

2010-12-31

ISBN

9787121125928

评分

★★★★★

标签

编程

书籍介绍

对c++程序员来说,iso/ansi c++标准的问世标志着一个新纪元的开始。c++标准为程序设计提供了很多新的便利和可能,但要想在如此众多的信息中挖掘到其中的精髓,现实世界中的程序员缺少足够的时间。本书针对一定的主题,为程序员提供了简明扼要的指导,从而将学习时间和疑惑减至最少。本书内容包括泛型程序设计与c++标准库、优化与性能、异常安全议题及技术、继承与多态、内存及资源管理、自由函数与宏等。

本书内容全面丰富,论述翔实清晰,作者权威且经验丰富,是c++程序员的必备读物。

作者简介
对每一位C++爱好者或C++专业程序员来说,Herb Sutter的名字应该不会让人感到陌生。作为ISO/ANSI C++标准委员会的委员,Herb Sutter不仅是C++程序设计领域公认的专家,还是深受程序员喜爱的技术讲师和作家。Herb Sutter在互联网上主持的Guru of the Week专栏广受欢迎,几乎成为每一位C++程序员的网上必读物。本书就是Guru of the Week的最新精华总结。
AI导读
编辑书评
  • 舒特的《More Exceptional C++》是一部典型的“进阶避坑指南”,其核心价值不在于传授新知识,而在于纠正根深蒂固的错误认知。与市面上常见的API手册不同,本书通过剖析ISO/ANSI C++标准边缘地带的模糊地带,如异常传播路径、模板实例化时机及多继承布局,展现了作者深厚的底层功底。尽管书中涉及的auto_ptr等概念在现代C++中已逐渐被智能指针替代,但其背后蕴含的资源所有权转移思想依然不过时。对于希望从“能写代码”跨越到“写出健壮、高效代码”的开发者而言,这本书提供了必要的思维训练,虽非必读经典,却是提升代码品味的优质磨刀石。
  • 本书的独特之处在于其对“复杂性”的坦诚态度。作者并未试图简化C++的难懂之处,而是直面诸如Copy-on-Write在多线程下的性能陷阱、内联函数对Profiling工具的干扰等现实矛盾。这种不回避争议、甚至主动制造认知冲突的写作方式,使得本书在同类技术书籍中独树一帜。然而,其局限也显而易见:内容高度依赖特定的编译器行为和旧版标准,缺乏对现代并发模型和移动语义的系统性更新。因此,它更适合作为辅助读物,与《Effective Modern C++》等新书搭配使用,前者负责夯实底层原理与防御性编程意识,后者负责拥抱新特性,二者互补方能构建完整的C++知识体系。
核心看点
  • 本书聚焦于C++标准库与泛型编程的深层陷阱,特别是异常安全与资源管理。不同于基础语法书,它通过剖析构造函数失败、未捕获异常及auto_ptr的局限性,揭示现代C++代码鲁棒性的核心逻辑,强调在复杂对象生命周期中保证状态一致性的技术细节。
  • 深入探讨性能优化的反直觉真相,重点解析Copy-on-Write(COW)策略在多线程环境下的性能代价与语义歧义。作者指出盲目追求精简或内联可能导致晦涩与维护困难,主张优先优化算法与数据结构,并警示编译器对inline函数的处理机制可能干扰性能分析工具的有效性。
  • 系统梳理继承与多态的高级议题,包括多继承的“连体双婴”问题、纯虚函数的非纯实现以及受控多态的设计模式。书中通过具体条款对比不同设计方案的优劣,旨在帮助程序员理解ISO/ANSI C++标准带来的新便利,同时规避因过度使用模板或继承导致的编译期错误与运行期隐患。
读者共识
  • 多数读者认为本书比前作《Exceptional C++》更具深度,尤其在异常安全和容器迭代器失效问题上讲解透彻。然而,也有声音指出模板相关章节难度较大,且部分内容略显陈旧,未能完全覆盖C++11之后的新特性,需读者自行甄别适用性。
  • 读者普遍赞赏书中关于Copy-on-Write字符串实现的详尽分析,认为这揭示了性能优化背后的复杂权衡。但部分评论提到,书中某些技巧属于“Trick”性质,在实际生产环境中需谨慎使用,否则可能引入难以调试的隐蔽问题,因此评价呈现两极分化。
  • 共识在于本书并非面面俱到的教程,而是针对特定痛点的专题突破。许多资深程序员表示,虽然全书篇幅不长,但每个条款都直击要害,特别是关于表达式求值顺序和Function Try Block的误区澄清,具有极高的参考价值,值得反复研读与实践。
精彩摘录
  • "精简会带来晦涩,过度的精简不适合应用到产品代码中。 准则:尽量提高可读性,避免编写晦涩的精简代码。"
  • "Make a function inline directs the compiler that it may choose to place a copy of the function's code directly into each place the code is used. In the cases where the compiler does so, it avoids generating a function call."
  • "If you're looking to improve efficiency in some way, always look to your algorithms and data structures first."
  • "Finally, note another practical reason for this: Profilers are a lot less good at identifying which inlined functions should NOT be inlined."
  • "Avoid inlining or detailed tuning until performance profiles prove the need."
  • "Without atomic integer operations, copy-on-write typically incurs a significant performance penalty. Even with atomic operations, COW can make common String operations take nearly 50% longer, even in single-threaded programs."
  • "In general, copy-on-write is often a bad idea in multithread-ready code. That's because the calling code can no longer know whether two distinct String objects actually share the same representation under the covers, so String must incur overhead to do enough serialization so that calling code can t"
  • "Most of COW(copy-on-write)'s primary advantage for small strings could be gained without COW by using a more efficient allocator."
目录
目录回到顶部↑
与大师面对面(译序) ⅸ
序 ?
前言 ?ⅰ
泛型程序设计与c++标准库 1

显示全部
用户评论
除了模板那块劲有点大,其他都还好
“为什么不用C++写程序系列”之《More Exceptional C++》。
这本还真是More了一下前一本;上一本exception safety是重点,于是这本在这个话题上的着重点不多;相反,PART I和PART II倒是挺出彩。
一般般啦。
太久没写C++,以至于看了都没什么感觉了。。。需要练练手了
这本书里用很多内容讲了按需拷贝的知识。感觉收获很多
也算是c++必看书籍吧,这本讲的内容并非出现的情况较多的点,而是更多介绍了一些trick吧。
没有没more的那本力道足。异常安全的仍然非常好,表达式求值顺序估计一般人注意不到,function try block就是高手也会误解的,哈哈。书如其名。容器,迭代器失效,cow字符串,value_ptr,泛型编程/traits/编译约束,其他书也有,这里的例子太好。
下载
全部深度解读 →主题书单高分榜最近更新