这个问题试图收集每年出版的几十本C++书中的少数珍珠。
与许多其他编程语言不同,这些编程语言通常是从互联网上的教程中学习的,很少有人能够在不学习一本写得很好的C++书的情况下快速学习C++。这样做太大和复杂了。事实上,它是如此之大和复杂,那里有有很多非常糟糕的C++书。我们谈论的不是糟糕的风格,而是像体育明显的事实错误和推广糟糕的编程风格这样的事情。
请编辑已接受的答案以提供质量的书籍和大致的技能水平-优选之后在C++聊天室讨论您的添加。(如果常客不同意推荐,他们可能会无情地撤销您的工作。)添加关于您亲自阅读/受益的每本书的简短简介/描述。随意讨论质量、标题等。符合标准的书籍将被添加到列表中。由C和C++用户协会(ACCU)进行评论的书籍有评论的链接。
中级
高级
参考风格-所有级别
注意:C++标准的所有版本都在以下问题中跟踪:我在哪里可以找到当前的C或C++标准文档?
C++11/14/17/…参考资料:
工作草案,编程语言C++标准从在GitHub上发布的LaTeX源代码生成。
C++标准论文,最新标准工作草案:ISO工作草案
C++11/14/17标准(INCITS/ISO/IEC 14882:2011/2014/2017)当然,这是所有C++的最终仲裁者。然而,请注意,它纯粹是作为愿意投入大量时间和精力来理解它的经历用户的参考。C++17标准以电子形式发布,售价198瑞士法郎。
C++17标准是可用的,但似乎不是以经济的形式-直接从ISO它花费198瑞士法郎(约200美元)。对于大多数人来说,标准化前的定稿已经足够了(而且免费)。许多人会更喜欢甚至更新的草案,记录可能包含在C++20中的新功能。
C++20草案在GitHub上作为一些年龄也可用。
新C++概览(C++11/14)(仅PDF)(Scott Meyers)(更新C++14)这些是Scott Meyers提供的为期三天的培训课程的演示材料(幻灯片和一些讲义),Scott Meyers是C++上备受尊敬的作者。尽管项目清单很短,但质量很高。
0号文档(由Bjarne Stroustrup和Herb Sutter编辑)是一个不断发展的在线文档,包含了一套很好地使用现代C++的指南。这些指南专注于相对更高级别的问题,如接口,资源管理,内存管理,以及影响应用程序架构和库设计的并发。这个项目排名第一,欢迎社区的贡献。大多数指南都补充了基本原理和示例,以及对可能的工具支持的讨论。许多规则是专门设计的,可以被静态分析工具自动检查。
0(Marshall Cline、Bjarne Stroustrup等)是标准C++基金会的一项努力,旨在统一C++FAQ,之前由Marshall Cline和Bjarne Stroustrup单独维护,并纳入了新的贡献。这些项目大多解决了中间水平的问题,并且通常以幽默的语气编写。并非所有项目都完全符合C++标准的最新版本。
cppreference.com(C++03/11/14/17/…)(由Nate Kohl发起)是一个总结了基本核心语言特性的wiki,并拥有C++标准库的广泛留档。留档非常精确,但比官方标准文档更易于阅读,并因其wiki性质提供更好的导航。该项目记录了C++标准的所有版本,该网站允许过滤特定版本的显示。该项目是由Nate Kohl在CppCon'14上展示。
经典/年长
备注:这些书籍中包含的某些信息可能不是最新的或不再被认为是最佳实践。
C++的设计与进化(Bjarne Stroustrup)如果你想知道为什么语言就是这样,这本书就是你找到答案的地方。这涵盖了C++的一切。
C++-(Andrew Koenig和Barbara Moo)[评论]
大规模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 1,vol 2。不幸的是,它们被一些琐碎的错误破坏了(例如维护临时文件是自动的
const
),没有官方勘误表。http://www.computersciencelab.com/Eckel.htm有部分3rd派对勘误表,但显然没有维护。科学与工程C++:先进技术与实例介绍(约翰·巴顿和李·纳克曼)这是一本全面而详细的书,试图在数值方法的背景下解释和利用C++中可用的所有特征。它介绍了当时的几种新技术,例如奇怪的循环模板模式(CRTP,也称为Barton-Nackman技巧)。它开创了多种技术,如量纲分析和自动微分。它带有许多可编译且有用的代码,从表达式解析器到Lapack包装器。代码是仍然可以在线。不幸的是,这些书在风格和C++功能上已经有些过时了,然而,这在当时是一个令人难以置信的巡回演出(1994年,STL之前)。关于动态继承的章节理解起来有点复杂,也不是很有用。这本经典书籍的更新版本,包括移动语义学和STL的经验教训将是非常好的。