stackoverflow上整理的C++各阶段学习书籍

如果觉得这些书籍对你有帮助,可以通过文章底部推广获取pdf,除此之外,也包括有Python、深度学习等书籍分享。

初学者

介绍性书籍,之前没有编程经验

  • C++ Primer(Stanley Lippman、Josée Lajoie、and Barbara E. Moo,已更新 C++11 内容)几乎有 1000 页,它非常彻底地介绍了 C++,用可读性很高的格式事无巨细地涵盖了语言中几乎所有的东西。这本书的第5版(发行于 2012.4.16)涵盖了 C++11 内容。

  • 不要将这本书与 C++ Primer Plus(Stephen Prata) 混淆,那本书有一个不太好的

  • [C++ 程序设计原理与实践(Bjarne Stroustrup,第二版 - 2014.5.25,已更新 C++11/C++14 内容)一本 C++ 之父写的该语言的编程教程,即使没有编程经验的初学者也可以轻松阅读,但它不仅仅是为初学者编写。

介绍性书籍,之前有编程经验

  • C++ 语言导学 (Bjarne Stroustrup,第二版为 C++17 标准)标题中的“导学”是指本书是一个所有标准 C++ 内容(语言和标准库以及如何使用 C++11)的一个快速(大约有 180 页 14 章节)概览,是以中高等水平或至少有经验的开发者的视角编写的。

  • Accelerated C++ (Andrew Koenig and Barbara Moo,第一版 - 2000.4.24)它的基础部分内容基本上和 《C++ Primer》相同,但这些只占它的四分之一。这是因为它并不是为了介绍如何编程,而是为已经使用其它语言编程的人介绍 C++。它有更加陡峭的学习曲线,但是啃下这本书就会发现它非常紧凑地介绍了 C++。(从历史的角度来看,它开创了新天地成为第一本使用现代语言教学方法的初学者书)尽管如此,这本书只介绍 C++98 的内容。

最佳实践

  • Effective C++:改善程序与设计的55个具体做法(Scott Meyers, 第三版 - 2005.3.22)这本书是为了成为 C++ 编程者最该看的第二本书而编写的,并且它成功了。早期版本是为了帮助 C 编程者了解 C++,第三版改变了受众为使用 Java 等语言的人。它用非常易于理解的风格展示了 50 多个易于记忆的经验法则以及其原理。它关于 C++11 和 C++14 的例子和几个问题已经过时,目前《Effective Modern C++》应该是首选。

  • Effective Modern C++(Scott Meyers)它基本上是《Effective C++》的新版本,旨在帮助 C++ 程序员从 C++03 过度到 C++11 和 C++14。

  • Effective STL(Scott Meyers)它旨在对 C++ STL 做与《Effective C++》相同的工作:它提出了经验法则以及其原理。


中级

  • More Effective C++:35个改善编程与设计的有效方法 介绍了比《Effective C++》更多的经验法则,虽然没有之前那本书介绍的内容重要,但了解一下还是有好处的。

  • Exceptional C++(Herb Sutter)这本书表现为一组谜题,通过对包含 pimpl 技法、name lookup、良好的类设计和 C++ 内存模型的讨论外,还通过资源获取即初始化(RAII)对 C++ 中正确的资源管理和异常安全进行了极佳和彻底的讨论。

  • More Exceptional C++(Herb Sutter)包含了在《Exceptional C++》中没有提到的异常安全话题,并且讨论了在 C++ 中如何有效地面向对象编程和 STL 的正确使用方法。

  • Exceptional C++ Style (Herb Sutter)讨论了泛型、优化以及资源管理,这本书还很好的阐述了在 C++ 中如何使用非成员函数来编写模块化代码以及单一责任原则。

  • C++ 编程规范 (Herb Sutter and Andrei Alexandrescu)这里的“编程规范”并不是指“我的缩进应该有几个空格?”,这本书包含了 101 个最佳实践方法、编程习惯和常见的陷阱来帮助你写出正确、可读并且高效的 C++ 代码。[评价]

  • C++ Templates(David Vandevoorde and Nicolai M. Josuttis)这本书包含了 C++11 之前就存在的模板。它涵盖了从很基础到最高级的模板元编程方法,解释了模板的工作原理(包括概述以及模板的实现)并讨论一些常见的陷阱。它在附录中巧妙地总结了单一责任原则(ODR)和重载解析(overload resolution)。包含 C++11、C++14 和 C++17 的第二版已经发行。

  • C++ 17 - The Complete Guide(Nicolai M. Josuttis)这本书描述了 C++17 中加入的新功能,从简单的“内联变量”、“constexpr if”一直到“多态内存资源(PMR)”和“利用过度对齐来分配资源”等所有内容

  • C++ in Action(Bartosz Milewski)这本书以从头构建一个完整的应用程序来解释 C++ 的功能。

  • C++ 函数式编程(Ivan Čukić)这本书描述了现代 C++(C++11 或更新)中的函数式编程技巧。对于想要在项目中灵活运用函数式编程技巧的人来说,这是本非常不错的书。

  • Professional C++ (Marc Gregoire, 第五版 - 2021.2)提供了对 C++ 的实现的全面、详细的介绍,它充满了专业技巧提示以及简洁但内容丰富的文本范例来强调 C++20 的新功能。书中所有范例使用了诸如 module 和 std::format 等的一些 C++20 的新功能。


进阶

  • C++ 设计新思维(Andrei Alexandrescu)一本关于高级泛型编程技术的开创性著作。它介绍了基于策略的设计、Typelist、基本的泛型编程习惯用法,之后解释了很多有用的,可以被高效、模块化且干净地使用泛型实现的设计模式(包括小对象分配器、仿函数、工厂模式、访问者模式以及 multi-methods)。

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

  • C++ 并发编程实战(Anthony Williams)一本涵盖 C++11 中支持并发内容的书,包括线程库、原子库、C++ 内存模型、锁和互斥锁,以及设计和调试多线程程序时会遇到的问题。覆盖 C++14 和 C++17 内容的第二版已经发行。

  • Advanced C++ Metaprogramming (Davide Di Gennaro)一本 C++11 之前的模板元编程(TMP)技术手册,它更多地关注实践而不是理论。本书中有很多由于类型特征而过时的片段,尽管如此其中的技术还是很值的学习的。如果你能忍受它奇怪的格式,它会比 Alexandrescu 那本更易于阅读,甚至更有价值。对于富有经验的开发者,这是一个了解 C++ 一些不为人知的,只能从丰富的编程经验中获知的冷知识的好机会。


编程风格参考 - 所有水平适用

  • C++ 程序设计语言(Bjarne Stroustrup,更新了 C++11 内容)C++ 之父撰写的经典教程书,与经典 K&R 读起来相似,涵盖了从语言核心到标准库,从编程范例到语言哲学的所有内容。

  • C++ 标准库 —— 自学教程与参考手册(Nicolai Josuttis,更新了 C++11 内容)提供了 C++ 标准库的介绍和参考,第二版(在 2012.4.9 发行)包含了 C++11。

  • The C++ IO Streams and Locales (Angelika Langer and Klaus Kreft)关于这本书几乎没什么需要说的,如果你想了解关于 stream 和 locale 的任何内容,那么这是个找到标准答案的地方。

经典书/旧书

  • C++ 语言的设计和演化(Bjarne Stroustrup)你可以在这本书里找到为什么 C++ 会这么设计,它涵盖了 C++ 在标准化之前的所有内容。

  • C++ 沉思录 (Andrew Koenig and Barbara Moo)

  • Advanced C++ Programming Styles and Idioms(James Coplien)pattern movement 的前身,它描述了许多 C++ 特有的“编程习惯”。如果你有空闲的话,这当然是一本非常值得一读的书,但它已经很久没有和更新的 C++ 标准适配了。

  • 大规模 C++ 程序设计 (John Lakos)Lakos 在这本书里描述了如何大型 C++ 软件项目。如果它更新了的话,当然会是一本好书。但它是在 C++98 之前编写的,并且错过了对大型项目很重要的如 namespace 的许多功能。如果你需要参与大型 C++ 软件项目,就很需要阅读这本要花费很多精力的书。

  • 深度探索C++对象模型(Stanley Lippman)如果你想知道通常在多继承方案中如何实现虚函数以及基础对象是如何被布置在内存中的,以及所有这些内容对性能的影响,那么你可以在这本书中找到这些主题相关的详尽的讨论。

  • The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis)在这本书探索了 1989 年的 C++ 2.0 版本的事实上来说,它就已经过时了——尚未引入模板、异常、名称空间和新类型。话虽如此,这本书还是贯穿了当时的整个 C++ 标准,解释了该语言的基本原理、可能的实现和功能。这不是一本用来学习 C++ 编程原理和模式的书,而是一本了解 C++ 语言的各个方面的书。

    参考链接:c++ faq - The Definitive C++ Book Guide and List - Stack Overflow

你可能感兴趣的:(C++基础学习,c++,开发语言,后端)