最终的C ++图书指南和列表
这个问题试图收集每年发布的几十本不好的C ++书籍中的几颗珍珠。
与许多其他编程语言不同,这些编程语言通常从因特网上的教程中随手选出,但很少有人能够在不学习写得很好的C ++书籍的情况下快速获取C ++。 这样做太复杂了。 事实上,它非常庞大而且复杂,因此有很多非常糟糕的C ++书籍 。 我们并不是在讨论糟糕的风格,而是像炫耀性的明显的事实错误,并促进糟糕的编程风格。
请编辑接受的答案,以提供高质量的书籍和大致的技能水平 - 最好在讨论您在C ++聊天室中的添加之后。 (如果常客不同意某项建议,常客可能会无情地撤消您的工作。)为您亲自阅读/从中受益的每本书添加简短的介绍/说明。 随意讨论质量,标题等。满足条件的图书将被添加到列表中。 由C和C ++用户协会(ACCU)进行评审的书籍有评论链接。
*注意:常见问题和其他资源可以在C ++标签信息和c ++ - faq下找到。
初学者
介绍性的,没有以前的编程经验
C ++ Primer *(Stanley Lippman,JoséeLajoie和Barbara E. Moo)( 针对C ++ 11更新 )在1k页面上,这是一篇非常全面的C ++入门介绍,涵盖了语言中所有内容,并且非常详细。 第五版(2012年8月16日发布)涵盖C ++ 11。 [评论]
编程:使用C ++的原理和实践(Bjarne Stroustrup,第2版 - 2014年5月25日)( 更新了C ++ 11 / C ++ 14 )该语言的创建者使用C ++进行编程的介绍。 一个很好的阅读,假设没有以前的编程经验,但不仅适合初学者。
*不要与C ++ Primer Plus(斯蒂芬普拉塔)混淆,并且评论会显着不利。
介绍性的,具有以前的编程经验
C ++(Bjarne Stroustrup)之旅( 第2版附带C ++ 17更新 )(电子书)“旅程”是一个快速的(大约180页和14章)教程概述所有标准C ++(语言和标准库, 以及使用C ++ 11 )对于已经了解C ++或者至少是经验丰富的程序员的人来说处于中等水平。 本书是构成The C ++ Programming Language第4版第2-5章的扩展版本。
加速的C ++(Andrew Koenig和Barbara Moo,第1版 - 2000年8月24日)这基本上覆盖了与C ++ Primer相同的基础,但是在四分之一的空间中这样做。 这很大程度上是因为它不会尝试引入编程,而是为以前用其他语言编程的人员介绍C ++。 它有一个更陡峭的学习曲线,但是,对于那些可以应付这一点,这是一个非常简洁的语言介绍。 (从历史上看,它是第一个使用现代方法来教授这门语言的初学者的书,从而打破了新的局面。)尽管如此,C ++教授纯粹是C ++ 98。 [评论]
最佳实践
有效的C ++(Scott Meyers,第3版 - 2005年5月22日)这本书的目的是成为C ++程序员应该阅读的最好的第二本书,并且它成功了。 早期的版本针对的是来自C语言的程序员,第三版改变了这一点,并针对来自Java等语言的程序员。 它提供了大约50个易于记忆的经验法则,以及它们在非常方便(令人愉快)的风格中的基本原理。 对于C ++ 11和C ++ 14,这些例子和一些问题已经过时,并且Effective Modern C ++应该是首选的。 [评论]
有效的现代C ++(Scott Meyers)这基本上是有效C ++的新版本,旨在使C ++程序员从C ++ 03转换到C ++ 11和C ++ 14。
中间
更有效的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和Herb Sutter编辑)是一个不断发展的在线文档,包含一套使用现代C ++的指南。 指南侧重于相对较高级别的问题,如接口,资源管理,内存管理和影响应用程序体系结构和库设计的并发性。 该项目由Bjarne Stroustrup等人在CppCon'15上宣布,并欢迎社区做出贡献。 大多数指南都补充了一个基本原理和示例,并讨论了可能的工具支持。 许多规则都是专门为静态分析工具自动检查而设计的。
C ++ Super-FAQ(Marshall Cline,Bjarne Stroustrup等)是标准C ++基金会的一项努力,用于统一由Marshall Cline和Bjarne Stroustrup先前单独维护的C ++常见问题解答,并纳入新的贡献。 这些项目主要解决中等水平的问题,并且通常以幽默的语气编写。 并非所有的项目都可以完全符合最新版本的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
)的影响,没有正式的勘误表。 部分第三方勘误列表可在(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学到的经验教训,将会非常好。