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

这个问题试图收集每年发布的数十种不良C ++书籍中的几颗珍珠。

与许多其他编程语言不同,这些编程语言通常从互联网上的教程中随时随地都能找到,但很少有人能够在没有学习写得很好的C ++书籍的情况下快速找到C ++。这样做太复杂了。事实上,它非常庞大而且复杂,因此有很多非常糟糕的C ++书籍。我们并不是在讨论糟糕的风格,而是像炫耀性的明显的事实错误,促进糟糕的编程风格

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

注意:常见问题解答和其他资源可以在C ++标签信息。C:The Definitive C Book Guide and List也有类似的帖子


初学者

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

  • C ++ Primer *(Stanley Lippman,JoséeLajoie和Barbara E. Moo)(针对C ++ 11更新)在1k页面上,这是一篇非常全面的C ++入门介绍,涵盖了语言中所有内容,并且非常详细。第五版(2012年8月16日发布)涵盖C ++ 11。[评论]
  • 编程:使用C ++的原理和实践(Bjarne Stroustrup)(更新用于C ++ 11 / C ++ 14)该语言的创建者使用C ++进行编程的介绍。一个很好的阅读,假设没有以前的编程经验,但不仅适合初学者。

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

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

  • C ++之旅(Bjarne Stroustrup)(电子书)“旅程”是一个快速(大约180页和14章)的教程,概述了所有标准C ++(语言和标准库以及使用C ++ 11)对于已经了解C ++或至少是有经验的程序员的人来说,本书是构成The C ++ Programming Language第4版第2-5章的扩展版本。
  • 加速的C ++(Andrew Koenig和Barbara Moo)这基本上覆盖了与 C ++ Primer相同的基础,但是在四分之一的空间中这样做。这很大程度上是因为它不会尝试引入编程,而是为以前用其他语言编程的人员介绍 C ++。它有一个更陡峭的学习曲线,但是,对于那些可以应付这一点,这是一个非常简洁的语言介绍。(从历史上看,它是第一个使用现代方法来教授这门语言的初学者的书,从而开创了一个新的领域。)尽管如此,C ++教授纯粹是C ++ 98。[评论]

最佳实践

  • 有效的C ++(Scott Meyers)这是为了成为C ++程序员应该阅读的最好的第二本书而写的,并且它成功了。早期的版本针对的是来自C语言的程序员,第三版改变了这一点,并针对来自Java等语言的程序员。它提供了大约50个易于记忆的经验法则,以及它们的基本原理,以一种非常方便(令人愉快)的方式。对于C ++ 11和C ++ 14,这些例子和一些问题已经过时,并且Effective Modern C ++应该是首选的。[评论]
  • 有效的现代C ++(Scott Meyers)这基本上是有效C ++的新版本,旨在使C ++程序员从C ++ 03转换到C ++ 11和C ++ 14。
  • 有效的STL(Scott Meyers)这样做的目的是对来自STL的标准库的部分做同样的事情,即Effective C ++对整个语言做的事情:它提供了经验法则及其基本原理。[评论]

中间

  • 更有效的C ++(Scott Meyers)与 Effective C ++相比,更多的经验法则。没有第一本书那么重要,但仍然很好知道。
  • 特殊的C ++(Herb Sutter)作为一组谜题展示,这是通过资源获取初始化(RAII),对C ++中适当的资源管理和异常安全性进行的最佳和彻底的讨论之一,此外还深入讨论了各种其他主题包括pimpl成语,名称查找,良好的类设计和C ++内存模型。[评论]
  • 除了在 C ++中讨论有效的面向对象编程以及正确使用STL之外,更多特殊的C ++(Herb Sutter)还包含 Exceptional C ++中未涉及的其他异常安全主题。[评论]
  • 卓越的C ++风格(Herb Sutter)讨论泛型编程,优化和资源管理; 本书还对如何使用非成员函数和单一责任原则在C ++中编写模块化代码做了精彩的阐述。[评论]
  • C ++编码标准(Herb Sutter和Andrei Alexandrescu)这里的“编码标准”并不意味着“我应该缩进多少个空格?”这本书包含101个最佳实践,成语和常见陷阱,可以帮助您编写正确,可理解且高效的C ++代码。[评论]
  • C ++模板:完整指南(David Vandevoorde和Nicolai M. Josuttis)这是关于C ++ 11之前存在的模板书。它涵盖了从基础知识到一些最先进的模板元编程的所有内容,并解释了模板如何工作(概念和实现方式)的每个细节,并讨论了许多常见的陷阱。附录中有一个定义规则(ODR)和重载决议的优秀摘要。甲第二版覆盖C ++ 11,C ++ 14和C ++ 17已经被发布。[评论]

高级

  • 现代C ++设计(Andrei Alexandrescu)关于高级通用编程技术的开创性书籍。介绍基于策略的设计,类型列表和基本泛型编程习惯用法,然后解释可以高效,模块化和干净地使用泛型编程实现多少有用的设计模式(包括小对象分配器,函子,工厂,访问者和多方法) 。[评论]
  • C ++模板元编程(David Abrahams和Aleksey Gurtovoy)
  • C ++ Concurrency In Action(Anthony Williams)一本介绍C ++ 11并发支持的书,包括线程库,原子库,C ++内存模型,锁和互斥锁,以及设计和调试多线程应用程序的问题。
  • 高级C ++元编程(Davide Di Gennaro)TMP技术之前的C ++ 11手册,更侧重于实践而非理论。本书中有很多片段,其中一些片段被类型特征过时了,但这些技术仍然有用。如果你能忍受古怪的格式/编辑,比Alexandrescu更容易阅读,并且可以说更有价值。对于更有经验的开发人员来说,很有可能你会发现一些关于C ++(怪癖)的黑暗角落,通常只有通过丰富的经验才能获得。

参考风格 – 所有级别

  • C ++编程语言(Bjarne Stroustrup)(针对C ++ 11更新)其创建者对C ++的经典介绍。写作与经典的K&R并行,其确实非常像它,涵盖了从核心语言到标准库,编程范例到语言哲学的所有内容。[评论]
  • C ++标准库教程和参考(Nicolai Josuttis)(针对C ++ 11更新)C ++标准库介绍和参考。第二版(2012年4月9日发布)涵盖C ++ 11。[评论]
  • C ++ IO流和区域设置(Angelika Langer and Klaus Kreft)除了如果你想知道任何关于流和区域设置的知识,这本书几乎没有什么可说的,那么这是找到明确答案的地方。[评论]

C ++ 11/14参考文献:

  • C ++标准(INCITS / ISO / IEC 14882-2011)当然,这是所有或不是C ++的最终仲裁者。然而,请注意,它纯粹是作为有经验的用户愿意投入大量时间和精力来理解的参考。像往常一样,第一个版本相当昂贵(300美元+美国),但现在已经以60美元的电子版发布。
  • C ++ 14标准是可用的,但看起来并不经济 – 直接从ISO购买需要198瑞士法郎(约合200美元)。对于大多数人来说,标准化之前最终草案绰绰有余(并且免费)。许多人会更喜欢更新的草案,记录可能包含在C ++ 17中的新特性。
  • 新C ++(C ++ 11/14)概述(仅限PDF)(Scott Meyers)(针对C ++ 1y / C ++ 14更新)这些是三维图形的演示材料(幻灯片和一些讲义)由Scott Meyers提供,这是一位备受推崇的C ++作者。尽管项目清单很短,但质量很高。
  • C ++核心准则(C ++ 11/14/17 / …) (由Bjarne Stroustrup的和香草萨特编辑)是由一组准则的使用现代C ++以及一个不断发展的在线文档。指南侧重于相对较高级别的问题,如接口,资源管理,内存管理和影响应用程序体系结构和库设计的并发性。该项目由Bjarne Stroustrup等人在CppCon’15上宣布,并欢迎社区的贡献。大多数指南都补充了一个基本原理和示例,并讨论了可能的工具支持。许多规则是专门为静态分析工具自动检查而设计的。
  • C ++超级FAQ(马歇尔克莱因,Bjarne的Stroustrup的和其他人)是由标准C ++基金会努力统一C ++常见问题以前由马歇尔克莱因和Bjarne的Stroustrup的单独维护,并纳入新的贡献。这些项目主要解决中等水平的问题,并且通常以幽默的语气编写。并非所有的项目都可以完全符合最新版本的C ++标准。
  • cppreference.com(C ++ 03/11/14/17 / …)(由Nate Kohl发起)是一个wiki,它总结了基本的核心语言功能,并且有丰富的C ++标准库文档。该文档非常精确,但比官方标准文档更易于阅读,并且由于其wiki性质而提供更好的导航。该项目记录了C ++标准的所有版本,并且该站点允许筛选特定版本的显示。该项目由Nate Kohl在CppCon’14展出

经典/老年人

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

  • C ++的设计和发展(Bjarne Stroustrup)如果你想知道为什么语言是这样的,那么这本书就是你找到答案的地方。这涵盖了C ++标准化之前的所有内容。
  • C ++上的反思 – (Andrew Koenig和Barbara Moo) [评论]
  • 高级C ++编程风格和习语(James Coplien)模式运动的前身,它描述了许多C ++特定的“习语”。这当然是一本非常好的书,如果你可以节省时间,可能还是值得一读的,但是对于目前的C ++来说,这本书还很旧,而且还不及时。
  • 大型C ++软件设计(John Lakos)Lakos解释了管理非常大的C ++软件项目的技术。当然,如果它只是最新的,那么这是一个很好的阅读。它早在C ++ 98之前就已经写入,并且在许多对大型项目都很重要的特性(例如名称空间)方面有所缺失。如果您需要在一个大型的C ++软件项目中工作,您可能需要阅读它,尽管您需要花费更多的精力。预计2018年新版本的第一册。
  • 在C ++对象模型里面(Stanley Lippman)如果你想知道虚拟成员函数是如何被普遍实现的,以及在多继承场景中基本对象是如何在内存中被普遍布置的,以及所有这些如何影响性能,找到这些话题的彻底讨论。
  • 注释的C ++参考手册(Bjarne Stroustrup,Margaret A. Ellis)本书在探索1989 C ++ 2.0版本 – 模板,异常,命名空间和新的转换还没有被引入这一事实上已经过时了。然而,这本书贯穿整个C ++标准,阐述了该语言的基本原理,可能的实现和功能。这不是一本学习C ++编程原理和模式的书,而是要了解C ++语言的每个方面。
  • 用C ++思考(Bruce Eckel)两卷; 是一套免费的入门级​​书籍。下载:第1 第2卷。不幸的是,它们被许多微不足道的错误所损害(例如,保持临时性是自动的const),没有正式的勘误表。的部分3方勘误表可在( http://www.computersciencelab.com/Eckel.htm),但它显然不能维持。
  • 科学和工程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学到的经验教训,将会非常好。
Tags:

添加评论

友情链接:蝴蝶教程