权威C++图书指南和清单

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

与许多其他编程语言不同,这些编程语言通常是从互联网上的教程中学习的,很少有人能够在不学习一本写得很好的C++书的情况下快速学习C++。这样做太大和复杂了。事实上,它是如此之大和复杂,那里有有很多非常糟糕的C++书。我们谈论的不是糟糕的风格,而是像体育明显的事实错误推广糟糕的编程风格这样的事情。

请编辑已接受的答案以提供质量的书籍和大致的技能水平-优选之后C++聊天室讨论您的添加。(如果常客不同意推荐,他们可能会无情地撤销您的工作。)添加关于您亲自阅读/受益的每本书的简短简介/描述。随意讨论质量、标题等。符合标准的书籍将被添加到列表中。由C和C++用户协会(ACCU)进行评论的书籍有评论的链接。

*注意:常见问题解答和其他资源可以在C++标签信息

2918704 次浏览

初学者

入门级,没有编程经验

作者特性介绍审查
C++入门*

*不要与C++Primer Plus混淆(Stephen Prata),明显不太有利审查。
Stanley Lippman, Josée Lajoie, and Barbara E. Moo(更新C++111k页,这是一个非常全面的C++介绍,以非常容易理解的格式和非常详细地涵盖了语言中的几乎所有内容。第五版(2012年8月16日发布)涵盖了C++11。[评论]
编程:使用C++的原理和实践Bjarne Stroustrup,第2版-2014年5月25日(更新C++11/C++14该语言的创建者使用C++编程的介绍。很好的阅读,假设没有以前的编程经验,但不仅仅适用于初学者。

入门,具有以前的编程经验

作者特性介绍审查
C++之旅Bjarne Stroustrup(第2版C++17第3版C++20“导览”是对所有标准C++(语言和标准库,使用C++11)的快速(约180页和14章)教程概述,对于已经了解C++或至少是经验丰富的程序员的人来说是中等水平的。本书是构成C++编程语言第4版第2-5章的材料的扩展版本。
加速C++Andrew Koenig和Barbara Moo,第1版-2000年8月24日这基本上涵盖了与C++底漆相同的领域,但在其四分之一的空间中这样做了。这主要是因为它并没有试图成为编程的介绍,而是为以前使用其他语言编程的人介绍C++。它有一个陡峭的学习曲线,但是,对于那些能够应付这一点的人来说,它是一个非常紧凑的语言介绍。(从历史上看,它是第一本使用现代方法教授语言的初学者书籍,开辟了新的领域。)尽管如此,它教授的C++纯粹是C++98。[评论]

最佳做法

作者特性介绍审查
有效C++Scott Meyers,第3版-2005年5月22日编写本书的目的是成为程序员应该阅读C++最好的第二本书,并且它成功了。早期版本针对的是来自C语言的程序员,第三版改变了这一点,并针对来自Java等语言的程序员。它以非常容易理解(和愉快)的风格介绍了大约50条易于记忆的经验法则及其基本原理。对于C++11和C++14,示例和一些问题已经过时,应该首选有效现代C++。[评论]
有效的现代C++Scott Meyers本书面向C++从C++03过渡到C++11和C++14的程序员。本书可以被视为前一本书“有效C++”某些部分的延续和“更正”。它们不涵盖相同的内容,但保留了类似的基于项目的主题。[评论]
有效的STLScott Meyers这旨在对来自STL的标准库部分执行与有效C++对整个语言所做的相同的操作:它提供了经验法则及其基本原理。

中级

作者特性介绍审查
更有效的C++Scott Meyers甚至比有效C++更多的经验法则。没有第一本书中的那些重要,但仍然很高兴知道。
异常C++HerbSutter作为一组谜题呈现,这是通过资源获取是初始化(RAII)C++中正确的资源管理和异常安全的最佳和彻底的讨论之一,此外还深入讨论了各种其他主题,包括pimpl习语,名称查找,良好的类设计和C++内存模型。[评论]
更多特殊C++HerbSutter除了讨论C++中有效的面向对象编程和正确使用STL之外,还涵盖了卓越的C++中未涵盖的其他异常安全主题。[评论]
特殊C++样式HerbSutter讨论了泛型编程、优化和资源管理;本书还极好地阐述了如何使用非成员函数和单一职责原则在C++中编写模块化代码。[评论]
C++编码标准赫伯·萨特和安德烈·亚历山大斯库这里的“编码标准”并不意味着“我应该缩进多少空格?”本书包含101个最佳实践、习语和常见陷阱,可以帮助您编写正确、可理解和高效的C++代码。[评论]
C++模板:完整指南David Vandevoorde和Nicolai M. Josuttis这是一本关于C++11之前存在的模板的0本书。它涵盖了从基础知识到一些最先进的模板元编程的所有内容,解释了模板如何工作的每一个细节(概念上和如何实现),并讨论了许多常见的陷阱。在附录中对一个定义规则(ODR)和重载解决方案进行了出色的总结。涵盖C++11、C++14和C++17的1已经出版。[评论]
C++17-完整指南Nicolai M. Josuttis本书描述了C++17标准中引入的所有新功能,涵盖了从简单的“内联变量”、“如果”到“多态内存资源”和“使用过度对齐的数据新建和删除”的所有功能。[评论]
C++20-完整指南Nicolai M. Josuttis本书介绍了C++20的所有新语言和库特性。它通过示例和背景信息涵盖了每个新特性的动机和上下文。重点是这些特性如何影响日常编程,组合它们意味着什么,以及如何在实践中从C++20中受益。(注意这本书是逐步出版,第一版现在已经完成。)
C++in Action巴托斯·米莱夫斯基本书通过从头开始构建应用程序来解释C++及其特性。[评论]
C++中的函数式编程伊万·乔基奇本书将函数式编程技术引入现代C++(C++11及以后)。对于那些想将函数式编程范例应用于C++的人来说,这是一本非常好的读物。

高级

作者特性介绍审查
现代C++设计安德烈·亚历山大斯库一本关于高级泛型编程技术的开创性书籍。介绍基于策略的设计、类型列表和基本的泛型编程习语,然后解释有多少有用的设计模式(包括小对象分配器、函子、工厂、访问者和多方法)可以使用泛型编程高效、模块化和干净地实现。[评论]
C++模板元编程大卫·亚伯拉罕和阿列克谢·古尔托沃伊
C++并发操作安东尼·威廉姆斯一本涵盖C++11并发支持的书,包括线程库、原子库、C++内存模型、锁和互斥锁,以及设计和调试多线程应用程序的问题。一本涵盖C++14和C++17的第二版已经出版。[评论]
高级C++元编程DavidediGennaro一本C++11年之前的TMP技术手册,更多地关注实践而不是理论。本书中有很多片段,其中一些因类型特征而过时,但这些技术仍然是有用的。如果你能忍受古怪的格式/编辑,它比亚历山大斯库更容易阅读,可以说,更有价值。对于更有经验的开发人员来说,你很有可能了解C++的黑暗角落(一种怪癖),这通常只有通过丰富的经验才能实现。
大规模C++第一卷,工艺和建筑(2020)约翰·拉科斯Lakos解释了管理非常大的C++软件项目的经过实战考验的技术。如果你在一个大的C++软件项目中工作,这是一本很棒的书,详细介绍了物理和逻辑结构之间的关系,组件的策略,以及它们的重用。[评论]

参考风格-所有级别

作者特性介绍审查
C++编程语言Bjarne Stroustrup(更新C++11它的创建者对C++的经典介绍。与经典的K&R并行编写,这确实读起来非常像它,涵盖了从核心语言到标准库,从编程范式到语言哲学的几乎所有内容。[评论]
注意:C++标准的所有版本都在以下问题中跟踪:我在哪里可以找到当前的C或C++标准文档?
C++标准库教程和参考Nicolai Josuttis(更新C++11介绍和参考C++标准库。第二版(2012年4月9日发布)涵盖C++11。[评论]
IO流和区域设置C++安吉莉卡·兰格和克劳斯·克雷夫特关于这本书几乎没有什么可说的,除了如果你想知道关于流和语言环境的任何事情,那么这是一个找到明确答案的地方。[评论]

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


经典/年长

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

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

  • C++-(Andrew Koenig和Barbara Moo)[评论]

  • 作为模式运动的前身,它描述了许多特定于C++的“习语”。这当然是一本非常好的书,如果你能抽出时间,可能仍然值得一读,但很旧,不符合当前的C++。

  • 大规模C++软件设计(John Lakos)Lakos解释了管理非常大的C++软件项目的技术。当然,如果它是最新的,那是一本很好的书。它写于C++98年之前很久,错过了许多对大型项目很重要的功能(例如命名空间)。如果你需要从事一个大型C++软件项目,你可能想阅读它,尽管你需要对此持怀疑态度。不要与扩展的和后来的系列书籍大规模C++卷I-III混淆。

  • 在C++对象模型中(Stanley Lippman)如果你想知道虚成员函数是如何实现的,在多继承场景中,基对象是如何在内存中布局的,以及所有这些如何影响性能,你会在这里找到对这些主题的彻底讨论。

  • 0(Bjarne Stroustrup, Margaret A. Ellis)这本书已经过时了,因为它探讨了1989C++2.0版本——模板、异常、命名空间和新的转换都还没有引入。但是,这本书贯穿了整个C++标准,解释了该语言的基本原理、可能的实现和特性。这本书不是学习C++编程原则和模式的书,而是理解C++语言的每个方面。

  • C++思考(Bruce Eckel,第2版,2000年)。两卷;是一套教程式的免费入门级书籍。下载:vol 1vol 2。不幸的是,它们被一些琐碎的错误破坏了(例如维护临时文件是自动的const),没有官方勘误表。http://www.computersciencelab.com/Eckel.htm有部分3rd派对勘误表,但显然没有维护。

  • 科学与工程C++:先进技术与实例介绍(约翰·巴顿和李·纳克曼)这是一本全面而详细的书,试图在数值方法的背景下解释和利用C++中可用的所有特征。它介绍了当时的几种新技术,例如奇怪的循环模板模式(CRTP,也称为Barton-Nackman技巧)。它开创了多种技术,如量纲分析和自动微分。它带有许多可编译且有用的代码,从表达式解析器到Lapack包装器。代码是仍然可以在线。不幸的是,这些书在风格和C++功能上已经有些过时了,然而,这在当时是一个令人难以置信的巡回演出(1994年,STL之前)。关于动态继承的章节理解起来有点复杂,也不是很有用。这本经典书籍的更新版本,包括移动语义学和STL的经验教训将是非常好的。