提问者:小点点

权威的C++书籍指南和列表


这个问题试图收集每年出版的几十本糟糕的C++书籍中的少数珍珠。

与许多其他编程语言不同的是,很少有人能在不学习一本写得很好的C++书籍的情况下快速学习C++。 这样做太大太复杂了。 事实上,它是如此庞大和复杂,以至于有很多非常糟糕的C++书籍。 我们谈论的不是不良风格,而是一些明显的事实错误,以及推广糟糕透顶的编程风格。

请编辑接受的答案,以提供高质量的书籍和一个近似的技能水平-最好是在C++聊天室讨论你的添加。 (常客如果不同意你的建议,可能会毫不留情地撤销你的工作。) 添加一个简短的简介/描述每一本你个人读过/受益的书。 请随意辩论质量,标题等。符合标准的书将被添加到列表中。 有C和C++用户协会(ACCU)评论的书籍都有评论的链接。

*注意:常见问题解答和其他资源可以在C++标记info和C++-FAQ下面找到。


共1个答案

匿名用户

>

  • C++入门*(Stanley Lippman,Josée Lajoie和Barbara E.Moo)(为C++11更新)有1K页,这是对C++的一个非常全面的介绍,以一种非常易访问的格式和非常详细的方式涵盖了几乎所有的语言。 第五版(2012年8月16号发布)涵盖了C++11。 [回顾]

    programming:Principles and Practice Using C++(Bjarne Strousstrup,第二版-5月25号,2014)(为C++11/C++14更新)语言创建者对使用C++编程的介绍。 一个很好的阅读,假设没有以前的编程经验,但不是只为初学者。

    *不要与C++Primer Plus(Stephen Prata)混淆,因为它的评价要差得多。

    >

  • C++教程(Bjarne Stroustrup)(C++17的第二版)“教程”是一个快速(约180页14章)的教程,对所有标准C++(语言和标准库,以及使用C++11)进行了概述,对已经了解C++的人或至少是有经验的程序员来说是中等水平的。 本书是构成C++编程语言第4版第2-5章的材料的扩展版本。

    加速C++(Andrew Koenig和Barbara Moo,第1版-8月24,2000)这基本上涵盖了与C++入门相同的内容,但只占了其四分之一的篇幅。 这在很大程度上是因为它并不试图成为编程入门,而是为以前用其他语言编程的人介绍C++。 它有一个陡峭的学习曲线,但是,对于那些能够应付这种情况的人来说,它是一个非常紧凑的语言入门。 (在历史上,它是第一本使用现代语言教学方法的初学者书籍,这是一个新的突破。) 尽管如此,它教的C++是纯粹的C++98。 [回顾]

    >

  • Effective C++(Scott Meyers,第3版-2005年5月22日)这本书的目的是成为C++程序员应该读的第二本最好的书,它成功了。 早期版本针对的是来自C语言的程序员,第三版改变了这一点,针对的是来自Java语言的程序员。 它介绍了大约50个简单易记的经验法则,以及它们的基本原理,以一种非常容易理解的(和愉快的)风格。 对于C++11和C++14,示例和一些问题已经过时,应该首选有效的现代C++。 [回顾]

    Effective Modern C++(Scott Meyers)这基本上是Effective C++的新版本,面向从C++03过渡到C++11和C++14的C++程序员。

    >

  • 更有效的C++(Scott Meyers)甚至比有效的C++更多的经验法则。 不像第一本书里的那些那么重要,但知道了还是很好的。

    异常C++(Herb Sutter)以一组谜题的形式呈现,它通过资源获取即初始化(resource Acquisition is Initialization,RAII)对C++中正确的资源管理和异常安全进行了最好和彻底的讨论,此外还深入介绍了各种其他主题,包括pimpl习惯用法,名称查找,良好的类设计和C++内存模型。 [回顾]

    除了讨论C++中有效的面向对象编程和STL的正确使用之外,更多的异常C++(Herb Sutter)涵盖了异常C++中没有涉及的其他异常安全主题。 [回顾]

    异常C++风格(Herb Sutter)讨论泛型编程,优化和资源管理; 本书还对如何使用非成员函数和单一职责原则在C++中编写模块化代码进行了出色的阐述。 [回顾]

    C++编码标准(Herb Sutter和Andrei Alexandrescu)这里的“编码标准”并不是指“我应该缩进多少空格我的代码?”这本书包含101个最佳实践,习惯用法和常见陷阱,可以帮助您编写正确,易懂和高效的C++代码。 [回顾]

    C++templates:The Complete Guide(David Vandevoorde和Nicolai M.Josuttis)这是一本关于C++11之前存在的模板的书。 它涵盖了从最基础到一些最高级的模板元编程的所有内容,并解释了模板如何工作的每一个细节(从概念上和如何实现它们),并讨论了许多常见的陷阱。 在附录中有一个定义规则(ODR)和重载解决方案的出色总结。 涵盖C++11,C++14和C++17的第二版已经出版。 [回顾]

    这本书描述了C++17标准中引入的所有新特性,从简单的“内联变量”,“constexpr if”一直到“多态内存资源”和“用过齐数据新建和删除”。

    > 《现代C++设计》(Andrei Alexandrescu),一本关于高级泛型编程技术的开创性书籍。 介绍了基于策略的设计,类型列表和基本的泛型编程习惯用法,然后解释了使用泛型编程可以高效,模块化和干净地实现许多有用的设计模式(包括小对象分配器,函数,工厂,访问者和多方法)。 [回顾]

    C++模板元编程(David Abrahams和Aleksey Gurtovoy)

    C++Concurrency In Action(Anthony Williams)这本书涵盖了C++11并发支持,包括线程库,atomics库,C++内存模型,锁和互斥,以及设计和调试多线程应用程序的问题。 涵盖C++14和C++17的第二版已经出版。

    Advanced C++元编程(Davide Di Gennaro)是一本关于TMP技术的C++11之前的手册,更侧重于实践而非理论。 在这本书中有大量的片段,其中一些被类型特征所淘汰,但是这些技巧,还是很有用的。 如果你能忍受古怪的格式/编辑,它比Alexandrescu更容易阅读,而且可以说,更有价值。 对于更有经验的开发人员来说,您很有可能会学到一些关于C++的黑暗角落(一种怪癖)的东西,而这种怪癖通常只有通过广泛的经验才能产生。

    Functional Programming in C++(Ivan Cukic)这本书向读者介绍了现代C++中的Functional范型。 它包含了理论和代码方面的各种例子和图表。 作者有教学经验,并用它顺利地指导读者通过函数式编程的不同方面。

    >

  • C++编程语言(Bjarne Stroustrup)(为C++11更新)由其创建者对C++的经典介绍。 与经典的K&R并行编写,这本书读起来确实很像它,涵盖了从核心语言到标准库,到编程范例到语言哲学的几乎所有内容。 “复习”注意:C++标准的所有版本都在这个问题中跟踪:我在哪里找到当前的C++标准。

    C++标准库教程和参考(Nicolai Josuttis)(为C++11更新)C++标准库的介绍和参考。 第二版(发布于2012年4月9号)涵盖了C++11。 [回顾]

    C++IO流和语言环境(Angelika Langer和Klaus Kreft)这本书几乎没有什么可说的,除了,如果你想知道关于流和语言环境的任何东西,那么这是一个可以找到明确答案的地方。 [回顾]

    C++11/14/17/…参考资料:

    >

  • C++11/14/17标准(INCITS/ISO/IEC 14882:2011/2014/2017),这当然是C++的最终仲裁者。 然而,请注意,它的目的纯粹是作为一个参考,有经验的用户愿意投入大量的时间和精力来理解它。 C++17标准以电子形式发布,售价为198瑞士法郎。

    C++17标准是可用的,但似乎不是一种经济的形式--直接来自ISO,成本为198瑞士法郎(约合200美元)。 对于大多数人来说,标准化之前的最终草案绰绰有余(而且是免费的)。 许多人会更喜欢一个更新的草案,记录C++20中可能包含的新特性。

    新C++(C++11/14)概述(仅PDF格式)(Scott Meyers)(为C++14更新)这些是Scott Meyers提供的为期三天的培训课程的演示材料(幻灯片和一些课堂讲稿),Scott Meyers是一位备受尊敬的C++作者。 项目清单虽短,质量却高。

    C++核心指南(C++11/14/17/…)(由Bjarne Stroustrup和Herb Sutter编辑)是一个不断发展的在线文档,它包含了一套正确使用现代C++的指南。 指导方针集中在相对较高级别的问题上,例如影响应用程序体系结构和库设计的接口,资源管理,内存管理和并发性。 该项目是由Bjarne Stroustrup和其他人在CPPCON'15上宣布的,欢迎来自社区的贡献。 大多数准则都补充了基本原理和示例,并讨论了可能的工具支持。 许多规则被专门设计成可由静态分析工具自动检查。

    C++Super-FAQ(Marshall Cline,Bjarne Stroustrup和其他人)是标准C++基金会的一项努力,目的是统一以前由Marshall Cline和Bjarne Stroustrup单独维护的C++FAQ,并加入新的贡献。 这些项目大多涉及中级水平的问题,而且往往以幽默的语调写作。 并不是所有的条目都完全符合C++标准的最新版本。

    CPPreference.com(C++03/11/14/17/…)(由Nate Kohl发起)是一个维基,它总结了基本的核心语言特性,并拥有C++标准库的大量文档。 该文档非常精确,但比官方标准文档更容易阅读,并且由于其wiki特性,提供了更好的导航。 该项目记录了C++标准的所有版本,并且该站点允许过滤特定版本的显示。 Nate Kohl在CPPCON'14上介绍了该项目。

    注:这些书中包含的某些信息可能不是最新的或不再被视为最佳实践。

    >

  • C++的设计与发展(Bjarne Stroustrup)如果你想知道为什么这种语言是这样的,这本书是你找到答案的地方。 这涵盖了C++标准化之前的一切。

    对C++-的反思(Andrew Koenig和Barbara Moo)[评论]

    Advanced C++Programming Styles and Idioms(James Coplien)模式运动的前身,它描述了许多特定于C++的“Idioms”。 这当然是一本非常好的书,如果你能抽出时间的话,可能仍然值得一读,但是它已经很老了,而且不是当前C++的最新版本。

    大型C++软件设计(John Lakos)Lakos解释了管理非常大的C++软件项目的技术。 当然,一本很好的读物,只要是最新的就好了。 它是在C++98之前很久编写的,并且遗漏了许多对大型项目很重要的特性(例如名称空间)。 如果您需要在一个大型的C++软件项目中工作,那么您可能会想要阅读它,尽管您需要对它持怀疑态度。 2019年推出新版第一卷。

    在C++对象模型内部(Stanley Lippman)如果您想知道在多继承场景中虚拟成员函数通常是如何实现的,基本对象通常是如何在内存中布局的,以及所有这些如何影响性能,那么您可以在这里找到有关此类主题的详细讨论。

    注释的C++参考手册(Bjarne Stroustrup,Margaret A.Ellis)这本书已经相当过时了,因为它探讨了1989年的C++2.0版本--模板,异常,命名空间和新的强制转换还没有引入。 尽管如此,本书还是介绍了当时的整个C++标准,解释了该语言的基本原理,可能的实现和特性。 这不是一本学习C++编程原理和模式的书,而是一本了解C++语言的每一个方面的书。

    用C++思考(Bruce Eckel,第二版,2000)。 两卷; 是一个教程风格的免费入门级书籍集。 下载:第一卷,第二卷。 不幸的是,它们被许多琐碎的错误所破坏(例如,维护临时文件是自动const),没有官方的勘误表列表。 第三方勘误表的部分清单可在(http://www.computersciencelab.com/eckel.htm)上查阅,但显然没有得到维护。

    科学与工程C++:高级技术和示例导论(John Barton和Lee Nackman)这是一本全面且非常详细的书,试图在数值方法的上下文中解释和利用C++中可用的所有特性。 它在当时引入了几种新技术,如奇怪的重复模板模式(CRTP,也叫巴顿-纳克曼技巧)。 它开创了诸如量纲分析和自动微分等技术。 它附带了许多可编译的有用代码,从表达式解析器到Lapack包装器都有。 代码仍可从以下网址获得:http://www.informit.com/store/scientifice-and-engineering-c-plus-plus-an-introduction-9780201533934。 不幸的是,这本书在风格和C++特性上已经有些过时了,然而,在当时(1994年,stl之前),这是一部令人难以置信的特技作品。 关于动态继承的章节理解起来有点复杂,也不是很有用。 这本经典书籍的更新版本,包括移动语义学和从STL中学到的教训,将是非常好的。

  • 相关问题


    MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(权威|c++|书籍|指|南和|列表)' ORDER BY qid DESC LIMIT 20
    MySQL Error : Got error 'repetition-operator operand invalid' from regexp
    MySQL Errno : 1139
    Message : Got error 'repetition-operator operand invalid' from regexp
    Need Help?