提问



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


与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C ++,而无需学习编写精良的C ++书籍。这样做太复杂了。事实上,它是如此庞大和复杂, 有很多非常糟糕的C ++书籍 。我们并不是在谈论糟糕的风格,而是体育明显的事实错误和促进糟糕的编程风格。


请修改已接受的答案以提供优质图书和近似技能级别 - 在C ++聊天室中讨论您的添加后的。 (如果他们不同意推荐,常客可能会毫不留情地撤销你的工作。)为你亲自阅读/受益的每本书添加简短的描述/描述。随意讨论质量,标题等。符合标准的书籍将被添加到列表中。由C和C ++用户协会(ACCU)进行评论的书籍都有指向评论的链接。


*注意:常见问题和其他资源可以在C ++标签信息和c ++ - faq中找到。 /questions/tagged/c%2b%2b-faq

最佳参考


初级



介绍,没有以前的编程经验




  • C ++ Primer *(Stanley Lippman,JoséeLajoie和Barbara E. Moo)(更新为C ++ 11 )以1k页为准,这是一个非常全面介绍C ++,以非常易于访问的格式详细介绍语言中的所有内容。第五版(2012年8月16日发布)涵盖了C ++ 11。 [[评论]] [6]

  • 编程:使用C ++的原理和实践(Bjarne Stroustrup,第2版 - 2014年5月25日)(更新为C ++ 11/C ++ 14 )介绍使用该语言的创建者使用C ++进行编程。一个很好的阅读,假设没有以前的编程经验,但不仅适合初学者。



<子>
*不要与 C ++ Primer Plus (Stephen Prata)混淆,评论明显不太好。
[9]


介绍,具有以前的编程经验




  • C ++之旅(Bjarne Stroustrup)( C ++ 17第二版)巡演快速(约180页和14章)教程对于已经了解C ++或至少是经验丰富的程序员的人来说,所有标准C ++(语言和标准库,和使用C ++ 11 )的概述都处于中等水平。本书是构成C ++编程语言第4章第2章的材料的扩展版本。 [11]

  • Accelerated C ++ (Andrew Koenig和Barbara Moo,第1版 - 2000年8月24日)这基本上与 C ++ Primer 相同,但是在它的第四个空间。这很大程度上是因为它并不试图成为编程的介绍,而是为以前用其他语言编程的人们介绍 C ++ 。它更陡峭学习曲线,但是,对于那些能够应对这种情况的人来说,它是对语言的一种非常紧凑的介绍。(从历史上看,它通过成为第一本使用现代方法来教授语言的初学者书而开辟了新天地。)尽管如此这个,C ++
    它教的纯粹是C ++ 98。 [[综述]] [13]



最佳做法




  • Effective C ++ (Scott Meyers,第3版 - 2005年5月22日)这篇文章的目的是成为C ++程序员应该阅读的最好的第二本书,并且它成功了。早期版本的目标是来自C的程序员,第三版改变了这一点,并针对来自Java等语言的程序员。它提供了大约50个易于记忆的经验法则以及它们在非常容易获得(和愉快)风格中的基本原理。对于C ++ 11和C ++ 14,示例和一些问题已经过时,应该首选Effective Modern C ++。 [[综述]] [15]

  • 有效的现代C ++ (Scott Meyers)这基本上是 Effective C ++ 的新版本,旨在让C ++程序员从C ++ 03过渡到C ++ 11和C ++ 14。

  • 有效STL (Scott Meyers)这个目标是对来自STL的标准库的部分做同样的事情 Effective C ++ 对整个语言的作用:它提出了经验法则及其基本原理。 [[综述]]






中间体




  • 更有效的C ++ (Scott Meyers)比 Effective C ++ 更多的经验法则。没有第一本书那么重要,但仍然有用。 [18]

  • Exceptional C ++ (Herb Sutter)作为一组谜题,通过资源获取初始化(RAII),对C ++中适当的资源管理和异常安全进行了最好,最彻底的讨论之一除了深入报道各种其他主题,包括pimpl成语,名称查找,良好的类设计和C ++内存模型。 [[综述]] [21]

  • 更多例外C ++ (Herb Sutter)除了讨论C ++中有效的面向对象编程和正确使用之外,还涵盖 Exceptional C ++ 中未涉及的其他异常安全主题STL。 [[综述]] [23]

  • 特殊的C ++风格(Herb Sutter)讨论通用编程,优化和资源管理;本书还对如何使用非成员函数和单一责任原则在C ++中编写模块化代码进行了很好的阐述。 [[综述]] [25]

  • C ++编码标准(Herb Sutter和Andrei Alexandrescu)编码标准并不代表我应该在多少空格中缩进代码?这本书包含101个最佳实践,习语和常见的陷阱可以帮助您编写正确,可理解且高效的C ++代码。[[评论]] [27]

  • C ++模板:完整指南(David Vandevoorde和Nicolai M. Josuttis)这是关于模板的 书,因为它们存在于C ++ 11之前。它涵盖了从基础知识到一些最先进的模板元编程的所有内容,并解释了模板如何工作的每个细节(概念上和它们如何实现),并讨论了许多常见的陷阱。在附录中有一个定义规则(ODR)和重载决策的优秀摘要。第二版已经发布了涵盖C ++ 11,C ++ 14和C ++ 17的版本。 [[综述]] [29] [30]






高级




  • 现代C ++设计(Andrei Alexandrescu)一本关于高级通用编程技术的开创性着作。介绍基于策略的设计,类型列表和基本的通用编程习惯,然后解释有多少有用的设计模式(包括小对象分配器,仿函数,工厂,访问者和多方法)可以使用通用编程高效,模块化和干净地实现。 [[综述]] [32]

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

  • C ++并发行动(Anthony Williams)一本涵盖C ++ 11并发支持的书,包括线程库,原子库,C ++内存模型,锁和互斥,以及设计和调试多线程应用程序。

  • 高级C ++元编程(Davide Di Gennaro)TMP技术的前C ++ 11手册,更多地关注实践而不是理论。本书中有大量的片段,其中一些片段特征已经过时,但这些技巧仍然有用。如果你能忍受古怪的格式/编辑,它比Alexandrescu更容易阅读,并且可以说更有价值。对于更有经验的开发人员来说,很有可能你会发现一些关于C ++(一个怪癖)的黑暗角落,这通常只是通过丰富的经验来实现的。






参考样式 - 所有级别




  • C ++编程语言(Bjarne Stroustrup)(针对C ++ 11更新)其创建者对C ++的经典介绍。写得与经典的K& R并行,这确实非常像它,涵盖了从核心语言到标准库,到编程范式再到语言哲学的所有内容。[[评论]]注:所有版本的C ++在这个问题中跟踪标准:我在哪里可以找到当前的C ++标准。 [37]

  • C ++标准库教程和参考(Nicolai Josuttis)(针对C ++ 11更新) C ++标准的介绍和参考图书馆。第二版(2012年4月9日发布)涵盖了C ++ 11。 [[综述]] [40]

  • C ++ IO流和语言环境(Angelika Langer和Klaus Kreft)除了如果您想了解有关流和语言环境的任何内容之外,关于本书几乎没有什么可说的,那么这是找到明确答案的地方。[[评论]] [42]



C ++ 11/14参考文献:



  • C ++标准(INCITS/ISO/IEC 14882-2011)当然,这是所有或不是C ++的最终仲裁者。但请注意,它是纯粹作为经验丰富的用户的参考,愿意花费大量的时间和精力来理解它。像往常一样,第一个版本相当昂贵(300美元+美国),但它现已以电子形式发售,售价60美元。[43]

  • C ++ 14标准可用,但似乎不是经济形式 - 直接来自ISO,它需要198瑞士法郎(约合200美元)。对于大多数人来说,标准化之前的最终草案绰绰有余(而且是免费的)。许多人会更喜欢更新的草稿,记录可能包含在C ++中的新功能17. [44] [45] [46]

  • 新C ++概述(C ++ 11/14)(仅限PDF)(Scott Meyers)(针对C ++ 1y/C ++ 14进行了更新这些是由Scott Meyers提供的为期三天的培训课程的演示材料(幻灯片和一些讲义),他是C ++备受推崇的作者。尽管项目清单很短,但质量很高。[47]

  • C ++核心指南(C ++ 11/14/17/...)(由Bjarne Stroustrup和Herb Sutter编辑)是一个不断发展的在线文档,包含一套使用现代C ++的指南好。指南侧重于相对较高级别的问题,例如接口,资源管理,内存管理以及影响应用程序架构和库设计的并发性。该项目在CppCon15由Bjarne Stroustrup和其他人宣布,并欢迎社区的贡献。大多数指南都补充了理由和示例以及可能的工具支持的讨论。许多规则专门设计为可通过静态分析自动检查工具。[48] [49]

  • C ++ Super-FAQ (Marshall Cline,Bjarne Stroustrup等)是标准C ++基金会共同努力统一以前由Marshall Cline和Bjarne Stroustrup单独维护的C ++常见问题解答贡献。这些项目主要针对中级问题,并且通常以幽默的语调编写。并非所有项目都可能与最新版本的C ++标准完全一致。[50]

  • cppreference.com(C ++ 03/11/14/17/...)(由Nate Kohl发起)是一个wiki,总结了基本的核心语言功能,并提供了大量的文档。 C ++标准库。文档非常精确,但比官方标准文档更易于阅读,并且由于其维基性质而提供更好的导航。该项目记录了C ++标准的所有版本,该站点允许过滤特定版本的显示。该项目由Nate Kohl在CppCon上发表,14。[51] [52]






经典/老年人



注意:这些书中包含的某些信息可能不是最新的,或者不再被视为最佳做法。



  • C ++的设计和演变(Bjarne Stroustrup)如果你想知道为什么语言是这样的,那么这本书就是你找到答案的地方。这涵盖了C ++标准化之前的所有。

  • C ++上的反思 - (Andrew Koenig和Barbara Moo)[[评论]] [55]

  • 高级C ++编程风格和习语(James Coplien)模式运动的前身,它描述了许多特定于C ++的习语。它肯定是一本非常好的书,如果你可以节省时间,可能仍然值得一读,但是相当陈旧,并且不能与当前的C ++保持同步。

  • 大规模C ++软件设计(John Lakos)Lakos解释了管理非常大的C ++软件项目的技术。当然,这是一个很好的阅读,如果它只是最新的。它早在C ++ 98之前编写,并且错过了许多对大型项目很重要的功能(例如命名空间)。如果你需要在一个大的C ++软件项目中工作,你可能想要阅读它,尽管你需要花费更多的东西。预计2018年新版本的第一卷。

  • C ++对象模型中的内容(Stanley Lippman)如果您想了解虚拟成员函数的常规实现方式以及基本对象在多继承场景中如何在内存中进行布局,以及如何所有这些都会影响性能,您可以在这里找到有关此类主题的详尽讨论。

  • Annotated C ++参考手册(Bjarne Stroustrup,Margaret A. Ellis)这本书已经过时了,因为它探讨了1989 C ++ 2.0版本 - 模板,例外,命名空间和新演员是还没有介绍。然而,这本书说明了本书贯穿整个C ++标准,解释了该语言的基本原理,可能的实现和功能。这不是一本学习C ++编程原理和模式的书,而是了解C ++语言的各个方面。

  • 用C ++思考(Bruce Eckel)两卷;是一个教程样式免费介绍级别的书籍。下载:第1卷,第2卷。不幸的是他们’由于一些微不足道的错误(例如自动保持临时const)而没有官方勘误列表。部分3 rd 派对勘误列表可在(http://www.computersciencelab.com/Eckel.htm)获得,但它显然没有维护。 [62]]] [63] [64]

  • 科学与工程C ++:高级技术与实例介绍(John Barton和Lee Nackman)
    它是一本全面且非常详细的书,试图在数值方法的上下文中解释和利用C ++中的所有可用功能。它在当时引入了几种新技术,例如奇怪的重复模板模式(CRTP,也称为Barton-Nackman技巧)。
    它开创了几种技术,如尺寸分析和自动微分。
    它附带了许多可编译和有用的代码,从表达式解析器到Lapack包装器。
    该代码仍可在此处获取:http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934。
    不幸的是,这些书在风格和C ++特性方面已经过时了,但是,当时它是一个令人难以置信的巡回演出(1994年,STL之前)。
    关于动力学继承的章节有点复杂,不太有用。
    这本经典书籍的更新版本包括移动语义和从STL中学到的经验教训将非常好。 [66]