跳转至

The Definitive C++ Book Guide and List

初学者

Book Description
C++ Primer 这本长达1000页的书是对C++非常全面的介绍,以非常易懂的格式和极大的细节涵盖了语言的几乎所有内容。第五版(2012年8月16日发布)涵盖了C++11。
Programming: Principles and Practice Using C++ 由C++语言的创造者撰写的用C++进行编程的入门书籍。这是一本很好的读物,它不假设读者有任何先前的编程经验,但也不仅仅限于初学者。第三版更新到C++20/C++23
A Tour of C++ "The 'tour'"是一本快速的(大约180页,14章)教程式概览,涵盖了全部标准C++(语言和标准库,并使用C++11)的中等高级水平内容,适合已经了解C++或至少是有经验的程序员。这本书是《C++程序设计语言》第四版第2至5章内容的扩展版本。第三版更新到C++20
Accelerated C++ 这本书基本上涵盖了与《C++ Primer》相同的内容,但只用了其四分之一的篇幅。它适合作为那些之前用其他语言编程过的人入门C++的书籍。学习曲线更陡峭,内容非常紧凑的C++语言入门书。遗憾的是使用C++98标准。
Effective C++ 这本书呈现了大约50条容易记住的经验法则及其理由。对于C++11和C++14,例子和一些问题已经过时,应该优先选择《Effective Modern C++》。
Effective Modern C++ 这本书面向的是正在从C++03过渡到C++11和C++14的C++程序员。这本书可以被视为《Effective C++》中某些部分的延续和“纠正”。它们没有涵盖相同的内容,但保持了类似的条目化主题。
Effective STL 这本书的目标是针对标准库中的STL部分做到《Effective C++》对整个语言所做的事情:它提供了经验法则及其理由。

中级

Book Author(s) Description review
More Effective C++ Scott Meyers 比《Effective C++》有更多的实用技巧。虽然这些技巧没有Effective C++中的那些技巧那么关键,但了解它们仍然是有益的。
Exceptional C++ Herb Sutter 这本书以一系列谜题的形式呈现,它对C++中适当的资源管理和异常安全性进行了最佳和深入的讨论,特别是通过资源获取即初始化(RAII)的方式,除此之外,还深入涵盖了包括pimpl惯用法、名称查找、良好的类设计以及C++内存模型在内的多种其他主题。 [Review]
More Exceptional C++ Herb Sutter 除了在《Exceptional C++》中未涵盖的异常安全性主题之外,这本书还讨论了C++中有效的面向对象编程以及正确使用 STL 标准模板库。 [Review]
Exceptional C++ Style Herb Sutter 这本书讨论了泛型编程、优化和资源管理;此外,它还出色地阐述了如何通过使用非成员函数和单一职责原则来编写C++中的模块化代码。 [Review]
C++ Templates: The Complete Guide David Vandevoorde and Nicolai M. Josuttis 这是一本关于C++11之前存在的模板的书籍。它涵盖了从非常基础的内容到一些最高级模板元编程的所有内容,并解释了模板如何工作的每一个细节(无论是概念上还是在实现上),并讨论了许多常见的陷阱。在附录中对单一定义规则(ODR)和重载解析有出色的总结。第二版已经出版,涵盖了C++11、C++14和C++17的内容。 [Review]
C++ 17 - The Complete Guide Nicolai M. Josuttis 这本书描述了C++17标准中引入的所有新特性,涵盖了从简单的如“内联变量”、“constexpr if”一直到“多态内存资源”和“带有过度对齐数据的new和delete”的所有内容。
C++ 20 - The Complete Guide Nicolai M. Josuttis 这本书介绍了C++20的所有新语言和库特性。它涵盖了每个新特性的动机和背景,包括示例和背景信息。重点在于这些特性如何影响日常编程,如何将它们结合起来,以及如何在实践中从C++20中获益。(请注意,这本书是分步出版的,第一版现在已经完成。)
C++ in Action Bartosz Milewski 这本书通过从头构建一个应用程序来解释C++及其特性。 [Review]
Functional Programming in C++ Ivan Čukić 这本书向现代C++(C++11及更高版本)介绍了函数式编程技术。对于那些想要将函数式编程范式应用于C++的人来说,这是一本非常好的读物。

高级

Book Author(s) Description review
Modern C++ Design Andrei Alexandrescu 一本关于高级泛型编程技术的开创性书籍。介绍了基于策略的设计、类型列表和基本的泛型编程惯用语,然后解释了如何使用泛型编程高效、模块化和清晰地实现许多有用的设计模式(包括小型对象分配器、仿函数、工厂、访问者和多态方法)。 [Review]
C++ Template Metaprogramming David Abrahams and Aleksey Gurtovoy
C++ Concurrency In Action Anthony Williams 一本涵盖C++11并发支持的书籍,包括线程库、原子操作库、C++内存模型、锁和互斥量,以及设计和调试多线程应用程序的问题。第二版已经出版,它涵盖了C++14和C++17的内容。 [Review]
Advanced C++ Metaprogramming Davide Di Gennaro 这是一本C++11之前的模板元编程(TMP)技巧手册,更侧重于实践而非理论。这本书中有很多代码片段,其中一些由于类型特性的出现而变得过时,但这些技巧仍然值得了解。如果你能忍受那些古怪的排版/编辑,它比Alexandrescu的书更容易阅读,而且可以说,更有收获。对于更有经验的开发者来说,你很可能会发现一些C++中的特殊或不寻常的特性,这通常只有通过广泛的经验才能获得。
Large Scale C++ volume I, Process and architecture (2020) John Lakos Lakos解释了经过实战检验的技术,用于管理非常大的C++软件项目。如果你在一个大的C++软件项目中工作,这是一本很好的读物,详细阐述了物理结构和逻辑结构之间的关系,组件的策略以及它们的重用。 [Review]

参考书

Book Author(s) Description review
The C++ Programming Language Bjarne Stroustrup (updated for C++11) 这是C++的创始人所写的C++经典入门书籍。它旨在与经典的K&R(Kernighan & Ritchie,即C语言的经典教程《The C Programming Language》的作者)相提并论,读起来确实非常相似,涵盖了从核心语言到标准库、编程范式到语言哲学的几乎所有内容。 [Review] Note: All releases of the C++ standard are tracked in the question "Where do I find the current C or C++ standard documents?".
C++ Standard Library Tutorial and Reference Nicolai Josuttis (updated for C++11) C++标准库的介绍和参考书籍。第二版(发布于2012年4月9日)涵盖了C++11的内容。
The C++ IO Streams and Locales Angelika Langer and Klaus Kreft 关于这本书,除了要说如果你想了解有关 streams 和 locales 的任何事情,那么这里就是找到权威答案的地方之外,几乎没什么可说的。 [Review]
  1. C++ Core Guidelines : 由Bjarne Stroustrup和Herb Sutter编辑的一套C++使用指南,旨在帮助开发者更好地使用现代C++。这些指南是在线文档,并且欢迎社区贡献。
  2. C++ Super-FAQ : 这是Standard C++ Foundation的一个项目,旨在统一之前由Marshall Cline和Bjarne Stroustrup分别维护的C++常见问题解答。
  3. cppreference.com: 这是一个C++参考文档的维基网站,由Nate Kohl发起,提供了C++标准库的详尽文档,并且易于阅读。

中文书推荐《STL源码剖析》侯捷