提问人: 提问时间:12/23/2008 最后编辑:97 revs, 53 users 23%sbi 更新时间:11/11/2023 访问量:3078948
权威的 C++ 书籍指南和列表
The Definitive C++ Book Guide and List
问:
这个问题试图从每年出版的几十本糟糕的 C++ 书籍中收集几颗珍珠。
与许多其他编程语言不同,这些语言通常是从互联网上的教程中学习的,很少有人能够在不学习写得很好的 C++ 书的情况下快速学习 C++。它太大了,太复杂了,无法做到这一点。事实上,它是如此之大和复杂,以至于有很多非常糟糕的C++书籍。我们谈论的不是糟糕的风格,而是像明显的事实错误和宣传糟糕的编程风格这样的事情。
请编辑接受的答案,以提供高质量的书籍和大致的技能水平——最好是在 C++ 聊天室讨论您的添加内容之后。(如果常客不同意推荐,他们可能会无情地撤消你的工作。添加关于您个人阅读/受益的每本书的简短简介/描述。随意讨论质量、标题等。符合条件的图书将被添加到列表中。有 C 和 C++ 用户协会 (ACCU) 评论的书籍有指向评论的链接。
答:
初学者
入门级,没有编程经验
书 | 作者 | 描述 | 回顾 |
---|---|---|---|
C++ Primer* * 不要与 C++ Primer Plus (Stephen Prata) 混淆,后者的好评要差得多。 |
Stanley Lippman、Josée Lajoie 和 Barbara E. Moo(针对 C++ 进行了更新11)) | 在1k页中,这是对C++的非常全面的介绍,它以非常易于访问的格式和非常详细的格式涵盖了该语言的几乎所有内容。第五版(2012 年 8 月 16 日发布)涵盖了 C++11。 | [评论] |
编程:使用 C++ 的原理和实践 | Bjarne Stroustrup,第 2 版 - 2014 年 5 月 25 日(针对 C++11/C++14 进行了更新) | 语言创建者使用 C++ 进行编程的介绍。一本很好的读物,假设以前没有编程经验,但不仅适用于初学者。 |
入门级,具有编程经验
书 | 作者 | 描述 | 回顾 |
---|---|---|---|
C++ 导览 | Bjarne Stroustrup(C++17 第 2 版,C++20 第 3 版) | “教程”是一个快速(大约 180 页和 14 章)教程概述,介绍了所有标准 C++(语言和标准库,以及使用 C++11),对于已经了解 C++ 或至少是有经验的程序员的人来说,这是一个中等高的水平。本书是构成《C++ 编程语言》第 4 版第 2-5 章的材料的扩展版本。 | |
加速的 C++ | Andrew Koenig 和 Barbara Moo,第 1 版 - 2000 年 8 月 24 日 | 这基本上涵盖了与 C++ Primer 相同的领域,但在其四分之一的空间中这样做。这主要是因为它并不试图成为编程的介绍,而是为以前用其他语言编程的人介绍 C++。它的学习曲线更陡峭,但是,对于那些能够应对这一点的人来说,它是对语言的非常紧凑的介绍。(从历史上看,它是第一本使用现代语言教学方法的初学者书籍,开辟了新天地。尽管如此,它教授的 C++ 纯粹是 C++98。 | [评论] |
最佳做法
书 | 作者 | 描述 | 回顾 |
---|---|---|---|
有效的 C++ | Scott Meyers,第 3 版 - 2005 年 5 月 22 日 | 这本书的目的是成为C++程序员应该阅读的最好的第二本书,它成功了。早期版本针对的是来自C语言的程序员,第三版改变了这一点,针对来自Java等语言的程序员。它以一种非常容易理解(和愉快)的风格呈现了 ~50 条易于记忆的经验法则及其基本原理。对于 C++11 和 C++14,示例和一些问题已经过时,应该首选有效的现代 C++。 | [评论] |
有效的现代 C++ | 斯科特·迈耶斯 | 本书面向从 C++03 过渡到 C++11 和 C++14 的 C++ 程序员。这本书可以看作是前一本书的某些部分的延续和“修正”——“有效的C++”。它们不涵盖相同的内容,但保留了相似的基于项目的主题。 | [评论] |
有效 STL | 斯科特·迈耶斯 | 这旨在对来自 STL 的标准库部分做同样的事情,就像 Effective C++ 对整个语言所做的那样:它提供了经验法则及其基本原理。 |
中间
书 | 作者 | 描述 | 回顾 |
---|---|---|---|
更有效的 C++ | 斯科特·迈耶斯 | 甚至比有效 C++ 更多的经验法则。不像第一本书中的那么重要,但仍然很高兴知道。 | |
出色的 C++ | 赫伯·萨特 | 作为一组谜题呈现,这是通过资源获取初始化 (RAII) 对 C++ 中适当的资源管理和异常安全性的最佳和彻底的讨论之一,此外还深入介绍了各种其他主题,包括疙瘩习语、名称查找、良好的类设计和 C++ 内存模型。 | [评论] |
更出色的 C++ | 赫伯·萨特 | 除了讨论 C++ 中的有效面向对象编程和正确使用 STL 之外,还介绍了 Exceptional C++ 中未涵盖的其他异常安全主题。 | [评论] |
卓越的 C++ 风格 | 赫伯·萨特 | 讨论泛型编程、优化和资源管理;本书还很好地阐述了如何使用非成员函数和单一责任原则在 C++ 中编写模块化代码。 | [评论] |
C++ 编码标准 | 赫伯·萨特和安德烈·亚历山德莱斯库 | 这里的“编码标准”并不意味着“我应该缩进多少个空格的代码?本书包含 101 个最佳实践、习语和常见陷阱,可以帮助您编写正确、易懂且高效的 C++ 代码。 | [评论] |
C++ 模板:完整指南 | 大卫·范德沃德(David Vandevoorde)和尼古拉·约苏蒂斯(Nicolai M. Josuttis) | 这是一本关于C++11之前存在的模板的书。它涵盖了从最基础到一些最高级的模板元编程的所有内容,并解释了模板如何工作的每一个细节(包括概念上和实现方式),并讨论了许多常见的陷阱。在附录中对单一定义规则 (ODR) 和重载解决方案进行了出色的总结。涵盖 C++11、C++14 和 C++17 的第二版已经出版。 | [评论] |
C++ 17 - 完整指南 | 尼古拉·约瑟夫蒂斯 | 本书介绍了 C++17 标准中引入的所有新功能,涵盖了从简单的“内联变量”、“constexpr if”一直到“多态内存资源”和“使用过度对齐的数据进行新建和删除”的所有内容。 | [评论] |
C++ 20 - 完整指南 | 尼古拉·约瑟夫蒂斯 | 本书介绍了 C++20 的所有新语言和库功能。它通过示例和背景信息涵盖了每个新功能的动机和背景。重点是这些功能如何影响日常编程,将它们结合起来意味着什么,以及如何在实践中从 C++20 中受益。(请注意,本书是逐步出版的,第一版现已完成。 | |
C++ 的实际应用 | 巴托什·米莱夫斯基 | 本书通过从头开始构建应用程序来解释 C++ 及其特性。 | [评论] |
C++ 中的函数式编程 | 伊万·丘基奇 | 本书介绍了现代 C++(C++ 及更高版本)的函数式编程技术。对于那些想要将函数式编程范式应用于 C++ 的人来说,这是一本非常好的读物。 |
高深
书 | 作者 | 描述 | 回顾 |
---|---|---|---|
现代 C++ 设计 | 安德烈·亚历山德莱斯库 | 一本关于高级泛型编程技术的开创性书籍。介绍基于策略的设计、类型列表和基本的泛型编程习惯用语,然后解释使用泛型编程可以高效、模块化和干净地实现多少有用的设计模式(包括小对象分配器、函子、工厂、访问者和多方法)。 | [评论] |
C++ 模板元编程 | 大卫·亚伯拉罕斯和阿列克谢·古尔托沃伊 | ||
C++ 并发在行动 | 安东尼·威廉姆斯 | 一本涵盖 C++11 并发支持的书,包括线程库、原子库、C++ 内存模型、锁和互斥锁,以及设计和调试多线程应用程序的问题。涵盖 C++14 和 C++17 的第二版已经发布。 | [评论] |
高级 C++ 元编程 | 达维德·迪·热纳罗 | C++11之前的TMP技术手册,更侧重于实践而不是理论。这本书中有大量的片段,其中一些因类型特征而过时,但这些技术仍然很有用。如果你能忍受古怪的格式/编辑,它比亚历山德莱斯库更容易阅读,而且可以说更有价值。对于更有经验的开发人员来说,你很有可能会发现一些关于C++的黑暗角落(一种怪癖),这通常只能通过丰富的经验来实现。 | |
大规模 C++ 卷 I,流程和体系结构(2020 年) | 约翰·拉科斯 | 扩展旧书“大规模 C++ 设计”的三部分系列的第一部分。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。 | [评论] |
C++ IO 流和区域设置 | 安吉丽卡·兰格和克劳斯·克雷夫特 | 关于这本书,没有什么可说的,除了如果你想知道任何关于流和语言环境的信息,那么这里就是找到明确答案的地方。 | [评论] |
C++11/14/17/...引用:
工作草案,从GitHub上发布的LaTeX源代码生成的编程语言C++标准。
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++ Core Guidelines (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发起)是一个wiki,它总结了基本的核心语言功能,并提供了C++标准库的大量文档。该文档非常精确,但比官方标准文档更易于阅读,并且由于其 wiki 性质而提供了更好的导航。该项目记录了 C++ 标准的所有版本,并且站点允许筛选特定版本的显示。该项目由 Nate Kohl 在 CppCon'14 上提出。
经典 / 老
注意:这些书籍中包含的某些信息可能不是最新的,或者不再被视为最佳实践。
The Design and Evolution of C++ (Bjarne Stroustrup) 如果你想知道为什么语言是这样的,这本书就是你找到答案的地方。这涵盖了 C++ 标准化之前的所有内容。
高级 C++ 编程风格和习语 (James Coplien) 作为模式运动的前身,它描述了许多特定于 C++ 的“习语”。这当然是一本非常好的书,如果你能抽出时间,可能仍然值得一读,但很旧,而且不是最新的 C++。
大型C++软件设计(John Lakos)Lakos解释了管理非常大的C++软件项目的技术。当然,如果它只是最新的,这是一本好书。它早在 C++ 98 之前就已经写好了,并且遗漏了许多对大型项目很重要的功能(例如命名空间)。如果你需要处理一个大型的 C++ 软件项目,你可能想阅读它,尽管你需要对它持保留态度。不要与扩展的和后来的丛书大规模 C++ 卷 I-III 混淆。
C++ 对象模型内部(Stanley Lippman) 如果您想知道在多继承方案中通常如何实现虚拟成员函数,如何在内存中布置基本对象,以及所有这些如何影响性能,您将在这里找到有关此类主题的深入讨论。
The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) 这本书已经过时了,因为它探讨了 1989 年的 C++ 2.0 版本 - 模板、异常、命名空间和新的强制转换尚未引入。然而,尽管如此,本书还是介绍了当时的整个 C++ 标准,解释了该语言的基本原理、可能的实现和特性。这不是一本学习 C++ 编程原理和模式的书,而是一本了解 C++ 语言各个方面的书。
用C++思考(Bruce Eckel,第2版,2000年)。两卷;是一套教程式的免费入门级书籍。下载: vol 1, vol 2.不幸的是,它们被许多微不足道的错误所破坏(例如,维护临时是自动的),没有官方的勘误表。部分第三方勘误表可在 http://www.computersciencelab.com/Eckel.htm 获得,但显然没有得到维护。
const
科学与工程 C++:高级技术和示例简介(John Barton 和 Lee Nackman) 这是一本全面且非常详细的书,试图在数值方法的上下文中解释和利用 C++ 中可用的所有功能。它当时引入了几种新技术,例如好奇重复的模板模式(CRTP,也称为 Barton-Nackman 技巧)。 它开创了多种技术,例如尺寸分析和自动微分。 它带有许多可编译且有用的代码,从表达式解析器到 Lapack 包装器。 该代码仍可在线获取。 不幸的是,这些书在风格和 C++ 功能上已经有些过时了,然而,它在当时(1994 年,STL 之前)是一个令人难以置信的巡回演出。 关于动态继承的章节理解起来有点复杂,用处不大。 这本经典书籍的更新版本,包括移动语义和从 STL 中吸取的经验教训,将非常好。
评论
2+2 = 4
评论