最终的C ++图书指南和列表

这个问题试图收集每年发表的几十本不好的C ++书籍中的几颗珍珠。

与许多其他编程语言不同的是,这些编程语言通常是从因特网上find的教程中挑选出来的,但很less有人能够在没有学习写得很好的C ++书籍的情况下快速findC ++。 这样做太复杂了。 事实上,它是如此庞大而复杂,以至于有很多非常糟糕的C ++书籍 。 我们并不是在讨论糟糕的风格,而是像炫耀性的明显的事实错误,以及糟糕的编程风格

请编辑接受的答案,以提供高质量的书籍和近似的技能水平 – 最好 讨论您在C ++聊天室中的添加之后 。 (如果常客不同意某项build议,常客可能会无情地撤销你的工作。)为你亲自阅读/从中受益的每本书增加一个简短的介绍或描述。 随意讨论质量,标题等。满足条件的图书将被添加到列表中。 由C和C ++用户协会(ACCU)进行评审的书籍有评论的链接。

注意:常见问题和其他资源可以在C ++标签信息和c ++ – faq下find 。 C: The Definitive C Book Guide and List也有类似的post

初学者

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

  • 编程:使用C ++的原理和实践 (Bjarne Stroustrup)( 更新了C ++ 11 / C ++ 14 )该语言的创build者使用C ++进行编程的介绍。 一个很好的阅读,假设没有以前的编程经验,但不仅是初学者。

介绍,与以前的编程经验

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

  • C ++ (Bjarne Stroustrup)之旅(电子书)“旅程”是一个快速的(大约180页,14章)教程概述所有的标准C ++(语言和标准库, 使用C ++ 11 )对于已经了解C ++或者至less是有经验的程序员的人来说, 本书是构成C ++编程语言第4版第2-5章的一个扩展版本。

  • 加速的C ++ (Andrew Koenig和Barbara Moo)基本上和C ++ Primer有相同之处 ,但是在四分之一的空间中是这样做的。 这非常重要,因为它不会试图引入编程 ,而是为以前用其他语言编程的人员介绍C ++ 。 它有一个更陡峭的学习曲线,但对于那些可以应付这个,这是一个非常简洁的语言介绍。 (从历史上看,它是第一个使用现代方法来教授这门语言的初学者的新手。) [评论]

*不要与C ++ Primer Plus (Stephen Prata)相混淆,并且评论不太好。

最佳做法

  • 有效的C ++ (Scott Meyers)这是为了成为C ++程序员应该阅读的最好的第二本书而写的,并且成功了。 早期的版本针对的是来自C的程序员,第三版改变了这一点,并针对来自Java等语言的程序员。 它提供了50个易于记忆的经验法则,以及它们在非常方便(令人愉快)的风格中的基本原理。 对于C ++ 11和C ++ 14来说,这些例子和一些问题已经过时,并且应该使用Effective Modern C ++。 [评论]

  • 有效的现代C ++ (Scott Meyers)这基本上是Effective C ++的新版本,目标是C ++程序员从C ++ 03转换到C ++ 11和C ++ 14。

  • 有效的STL (Scott Meyers)这样做的目的是对来自STL的标准库的部分做同样的事情: Effective C ++对整个语言做了什么:它提供了经验法则和原理。 [评论]

中间

  • 更有效的C ++ (Scott Meyers)比Effective C ++有效的规则。 没有第一本书那么重要,但是还是很有意思。

  • 例外的C ++ (Herb Sutter)作为一组谜题,通过资源获取初始化(RAII),除了深入地介绍各种各样的资源之外,通过C ++对资源pipe理和exception安全进行了最佳和彻底的讨论其他主题包括pimpl成语,名称查找,良好的类devise和C ++内存模型。 [评论]

  • 更多特殊的C ++ (Herb Sutter)除了在C ++中讨论有效的面向对象编程和正确使用STL之外,还涵盖了Exceptional C ++中没有涉及的其他exception安全主题。 [评论]

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

  • C ++编码标准 (Herb Sutter和Andrei Alexandrescu)这里的“编码标准”并不意味着“我应该缩进多less个空格?”这本书包含了101个最佳实践,成语和常见的陷阱,可以帮助你写出正确的,可理解的,高效的C ++代码。 [评论]

  • C ++模板:完整指南 (David Vandevoorde和Nicolai M. Josuttis)这是关于C ++ 11之前存在的模板书。 它涵盖了从基础知识到一些最先进的模板元编程的一切,并解释了模板如何工作(概念上和实现方式)的每个细节,并讨论了许多常见的陷阱。 在附录中有一个定义规则(ODR)和重载决议的极好的总结。 第二版涵盖C ++ 11,C ++ 14和C ++ 17已经发布。 [评论]


高级

  • 现代C ++devise (Andrei Alexandrescu)关于高级generics编程技术的开创性着作。 介绍基于策略的devise,types列表和基本的generics编程习惯用法,然后解释可以有效,模块化地使用generics编程实现多less有用的devise模式(包括小对象分配器,函子,工厂,访问者和多方法) 。 [评论]

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

  • C ++并发在行动 (Anthony Williams)一本介绍C ++ 11并发支持的书,包括线程库,primefaces库,C ++内存模型,锁和互斥锁,以及multithreading应用程序的devise和debugging问题。

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


参考风格 – 所有级别

  • C ++编程语言 (Bjarne Stroustrup)( 更新了C ++ 11 )C ++的创build者经典的介绍。 写作与经典的K&R并行,它确实非常像它,涵盖了从核心语言到标准库,到编程范例到语言哲学的所有内容。 [评论]

  • C ++标准库教程和参考 (Nicolai Josuttis)( 更新了C ++ 11 )C ++标准库介绍和参考。 第二版(2012年4月9日发布)涵盖C ++ 11。 [评论]

  • C ++ IO Streams and Locales (Angelika Langer and Klaus Kreft)关于这本书,除了如果你想知道关于stream和语言环境的东西,那么这本书是很难说的,那么这是find明确答案的地方。 [评论]

C ++ 11/14参考文献:

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

  • C ++ 14标准是可用的,但看起来并不经济 – 直接从ISO购买 ,需要198瑞士法郎(约合200美元)。 对大多数人来说, 标准化之前的最终草案是绰绰有余的(而且是免费的)。 许多人会更喜欢更新的草案 ,logging可能包含在C ++ 17中的新特性。

  • 新C ++(C ++ 11/14) 概述(仅限PDF) (Scott Meyers)( 更新了C ++ 1y / C ++ 14 )这些是三维graphics的演示材料(幻灯片和一些讲义)由Scott Meyers提供,这是一位在C ++上备受推崇的作者。 即使项目清单很短,质量也很高。

  • C ++核心指南(C ++ 11/14/17 / …) (由Bjarne Stroustrup和Herb Sutter编辑)是一个不断发展的在线文档,包含一套使用现代C ++的指南。 指南侧重于较高层次的问题,例如界面,资源pipe理,内存pipe理和影响应用程序架构和库devise的并发。 该项目由Bjarne Stroustrup等在CppCon'15上宣布,并欢迎社会各界的贡献。 大多数指南都补充了一个基本原理和实例,并讨论了可能的工具支持。 许多规则是专门为静态分析工具自动检查而devise的。

  • C ++超级常见问题解答 (Marshall Cline,Bjarne Stroustrup等)是由标准C ++基金会努力统一以前由Marshall Cline和Bjarne Stroustrup单独维护的C ++常见问题解答,并纳入新的贡献。 这些项目主要是处理中间层面的问题,而且通常以幽默的语调写出来。 并不是所有的项目都可以完全符合最新版本的C ++标准。

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


经典/老年人

注:这些书中包含的一些信息可能不是最新的或不再被认为是最佳实践。

  • C ++ (Bjarne Stroustrup) 的devise和发展如果你想知道为什么语言是这样,那么这本书就是你find答案的地方。 这涵盖了C ++ 标准化之前的一切。

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

  • 高级C ++编程风格和习语 (James Coplien)模式运动的前身,它描述了许多特定于C ++的“习语”。 这当然是一本非常好的书,如果你可以节省时间,可能还是值得一读的,但是对于现在的C ++来说,这本书还是很老的,而且还不是最新的。

  • 大型C ++软件devise (John Lakos)Lakos解释了pipe理非常大的C ++软件项目的技术。 当然,好的阅读,如果只是最新的。 它早在C ++ 98之前就已经写好了,并且在许多大规模项目中很重要的特性(比如命名空间)都是错过的。 如果您需要在一个大型的C ++软件项目中工作,您可能需要阅读它,尽pipe您需要花费更多的精力。 新版本的第一卷预计在2018年 。

  • 在C ++对象模型里面 (Stanley Lippman)如果你想知道虚拟成员函数是如何被普遍实现的,以及在多inheritance场景中基本对象是如何在内存中被普遍布置的,以及这些是如何影响性能的,find这些话题的彻底讨论。

  • 注释的C ++参考手册 (Bjarne Stroustrup,Margaret A. Ellis)这本书在探索1989 C ++ 2.0版本 – 模板,exception,命名空间和新的转换还没有被引入这个事实上是相当过时的。 然而,说这本书贯穿整个C ++标准的时候,解释语言的基本原理,可能的实现和特性。 这不是学习C ++编程原理和模式的书,而是要了解C ++语言的每个方面。

  • 用C ++思考 (Bruce Eckel)两卷; 是一套免费的入门级​​书籍。 下载: 第1 卷 , 第2卷 。 不幸的是,它们受到许多微不足道的错误(例如,保持临时性自动为const )的影响,没有正式的勘误表。 部分第三方勘误列表可在( http://www.computersciencelab.com/Eckel.htm )上find,但显然不能维护。

  • 科学与工程C ++:高级技术与范例介绍 (John Barton and Lee Nackman)这是一本全面而又非常详尽的书,试图在数值方法的背景下解释和利用C ++中所有可用的特性。 它在当时引入了一些新技术,如奇怪的循环模板模式(CRTP,也叫巴顿 – 纳克曼技巧)。 它开创了几个技术,如尺寸分析和自动分化。 它附带了大量可编译和有用的代码,从expression式parsing器到Lapack包装器。 代码仍然可以在这里: http : //www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934 。 不幸的是,这些书在风格和C ++特性方面已经有点过时了,然而,当时(1994年,STL之前)这本书是一个令人难以置信的巡回展览。 关于dynamicinheritance的章节有点复杂,理解并不是很有用。 这个经典书籍的更新版本,包括移动语义和STL的经验教训将是非常好的。