More Exceptional C++中文版

[美] Herb Sutter

出版时间

2002-09-01

ISBN

9787560927718

评分

★★★★★
书籍介绍
More Exceptional C++是Exceptional C++的续篇。根据多年程序开发的实践经验、Herb Sutter向C++程序员提供了久经考验的程序设计技术和行之有效的解决方案,这些技术和方案对设计从小型工程到企业级应用的现代软件系统大有裨益。 围绕着40个编程难题, More Exceptional C++引导读者深刻理解成功的C++软件设计和开发中至关重要的原则和议题。书中包括一些新的主题,强化了泛型程序设计、内存管理、C++标准库的使用等内容,并涵盖了traits和predicates这样的重要技术;还就使用标准容器和算法时应该牢记的准则和要点进行了分析——其它资料很少深入涉及这一主题。 读者可以在书中找到以下重要问题的解决方案:使用std::map和std::set时会遇到哪些陷阱?如何安全地避免这些陷阱?何种predicates可以安全地和STL一起使用?何种不行?为什么?想通过“与模板协同工作的类型”的能力改变模板自身的行为吗?有什么现有的技术可以写出这种威力强大的通用模板代码?何时应该优化你的代码?如何优化?为什么花哨的优化会(而且的确会)让我们陷入麻烦?如何你是在撰写多线程安全代码,这些问题的某些答案会如何变化?异常安全问题会影响到类的设计吗?或者,它可以只是作为事后的改进手段来使用吗?在结合使用不同供应商提供的基于继承的程序库时,如何避免连体双婴问题?如何安全地使用auto-ptr?如何运用常见的设计模式来改装它,使之消除常见缺陷?可以将auto-ptr用作类的成员吗?在这样做之前,你应该了解些什么? 还有,现代C++中最常见的问题之一:到底在何时使用名字空间?如何使用? More Exceptional C++是真正的程序员的必读之物,在展示如何用C++撰写优质代码的同时,它为读者提供了对语言彻底而实用的理解。
AI导读
编辑书评
  • 本书的真正价值在于其“防御性编程”的思维范式,而非具体的语法技巧。Herb Sutter通过剖析STL陷阱和内存模型,揭示了C++强大灵活性背后的脆弱性。与同类书相比,它不教条地罗列规则,而是展示决策过程:为何在某些场景下放弃性能换取安全,或为何拒绝看似优雅的代码精简。这种对权衡的艺术的阐释,使其超越了普通技术手册,成为一本关于软件设计哲学的著作。尽管部分API已过时,但其关于异常安全和资源所有权的逻辑内核,依然是现代C++开发的基石。
  • 值得读,但需选对时机。对于处于职业瓶颈期、渴望突破“能用”到“好用”界限的中级工程师,本书是极佳的催化剂。它能迫使读者直面自己代码中的隐性风险。然而,若你正忙于快速迭代业务功能,或刚接触C++,本书可能会因过于侧重底层细节而分散精力。建议在完成一个中型项目复盘时阅读,带着实际遇到的Bug去书中寻找根源,此时其指导意义最为显著。它不是入门指南,而是资深者的磨刀石。
核心看点
  • 本书以40个具体编程难题为切入点,深度剖析C++泛型程序设计、内存管理及标准库使用的核心原则。不同于基础语法书,它聚焦于traits、predicates等高级技术,以及STL容器与算法的潜在陷阱,旨在通过解决实际问题引导读者建立对语言底层机制的深刻理解,强调设计模式在消除常见缺陷(如auto-ptr误用)中的实战价值。
  • 针对性能优化提出反直觉但极具工程价值的准则:反对过度精简和盲目内联,主张优先优化算法与数据结构。书中详细论证了Copy-on-Write在多线程环境下的性能惩罚及安全性隐患,指出花哨的优化往往引入复杂性而非效率提升,倡导基于Profiler数据的理性调优,体现了Herb Sutter对代码可维护性与执行效率平衡的深刻洞察。
  • 系统梳理异常安全与类设计的内在联系,打破“异常处理仅是事后补救”的认知误区。通过探讨函数try块的作用域扩展及异常安全对接口设计的影响,本书揭示了现代C++中鲁棒性代码构建的关键逻辑。同时,深入解析名字空间的使用规范及跨供应商库集成时的连体双婴问题,为企业级软件架构提供了经过实践检验的设计指南。
读者共识
  • 读者普遍认为本书是C++进阶必读的经典之作,尤其认可其在泛型程序设计、内存管理和异常安全方面的深度剖析。尽管部分章节因时代久远而略显过时,但其揭示的工程原则和设计陷阱依然具有普适价值。许多资深程序员表示,书中关于避免过度优化和重视可读性的观点,对其编码习惯产生了深远影响。
  • 评价呈现两极分化:一方面赞赏其内容的实用性和对细节的极致追求,认为能回答出书中问题即达到High Level水平;另一方面批评其相比前作《Exceptional C++》略显零散,且部分主题在其他更现代的书籍中阐述得更清晰。有读者指出,若未掌握基础模板知识,直接阅读本书会感到两眼昏花,难以完全吸收。
  • 多数读者肯定其中文译本的质量,认为翻译准确流畅,降低了阅读门槛。然而,也有声音指出本书更适合“按需查阅”而非线性通读,特别是在处理多线程安全和特定库集成问题时。整体共识在于,这是一本需要反复咀嚼的工具书,其价值不在于提供现成答案,而在于培养对C++复杂特性的直觉判断力。
精彩摘录
  • "精简会带来晦涩,过度的精简不适合应用到产品代码中。 准则:尽量提高可读性,避免编写晦涩的精简代码。"
  • "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++书籍之一,工程经验积累。
同EC++一样,每个C++程序员必看的一本书。
翻译很好,值得表扬。
防身必备。
当时这一系列的C++书是百读不厌!
读了类继承,内存,还有智能指针那些章节,有些东西在其他书里面看到过了,感觉我原来看到过的那些书阐述得更好,其他章节的话,目前我还用不到,不太想看,比较细节的东西,用到了再来看看这些注意事项吧
这本比上一本要好读
相比Exceptional C++来有所不及
除了异常相关的读完. 虽然在难度打分上比expectional低,但是个人感觉反而更难一点. 都是很实用的细节...如果面试问到这些条款,并且能回答出,已经算high level的C++ programmer了吧。 是不是我对自己要求太低了....
下载
全部深度解读 →主题书单高分榜最近更新