权威的C ++书籍指南和清单

眉间皱痕 提交于 2019-11-29 14:30:57
这篇文章是 社区维基 。 编辑现有答案以改善此职位。 它当前不接受新的答案。

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

与许多其他编程语言不同,这些语言通常是在Internet上的教程中经常使用的,而无需学习一本精心编写的C ++书籍,很少有人能够快速使用C ++。 这样做太大,太复杂。 实际上,它是如此之大和复杂,以至于有很多非常糟糕的C ++书籍 。 我们不是在谈论不良的风格,而是诸如炫耀明显的事实错误推广极差的不良编程风格之类的东西

请编辑接受的答案,以提供优质的书籍和大致的技能水平- 最好 在C ++聊天室中讨论添加内容 之后 。 (如果常规员工不同意建议,他们可能会毫不留情地撤消您的工作。)为您亲自阅读/受益的每本书添加简短的简介/说明。 随时讨论质量,标题等。符合条件的书籍将添加到列表中。 具有C和C ++用户协会(ACCU)的评论的书籍具有该评论的链接。

*注意:常见问题解答和其他资源可以在C ++标签信息c ++-faq下找到


#1楼

初学者

入门,没有以前的编程经验

  • C ++ Primer *(Stanley Lippman,JoséeLajoie和Barbara E. Moo)( 针对C ++ 11更新 )以1k页的篇幅对C ++进行了非常全面的介绍,它以一种易于访问的格式涵盖了该语言的几乎所有内容。并且非常详细。 第五版(2012年8月16日发布)涵盖了C ++ 11。 [评论]

  • 编程:使用C ++的原理和实践 (Bjarne Stroustrup,第二版-2014年5月25日)( 已针对C ++ 11 / C ++ 14更新 )语言的创建者对使用C ++进行编程的介绍。 一本不错的书,它假定没有以前的编程经验,而且不仅适合初学者。

*不要与混淆C ++的Primer Plus (斯蒂芬·普拉塔),有显著不太有利的评论

入门,具有以前的编程经验

  • C ++导览 (Bjarne Stroustrup)( C ++ 17的第二版 )“导览”是对所有标准C ++(语言和标准库, 以及使用C ++ )的快速概览(约180页,共14章)。 11 )对于已经了解C ++或至少是有经验的程序员的人,应具有较高的水平。 本书是构成C ++编程语言(第4版)第2-5章的材料的扩展版本。

  • 加速的C ++ (Andrew Koenig和Barbara Moo,第一版-2000年8月24日)覆盖了与C ++ Primer相同的基础,但覆盖了其空间的四分之一。 这主要是因为它并非试图成为编程的介绍,而是试图为以前使用其他语言进行编程的人介绍C ++ 。 它具有陡峭的学习曲线,但是,对于那些可以应付的人,它是对语言的非常紧凑的介绍。 (从历史上看,它是第一本使用现代方法教授语言的初学者书籍,开辟了新天地。)尽管如此,它所教授的C ++纯粹是C ++ 98。 [评论]

最佳实践

  • 有效的C ++ (Scott Meyers,第3版,2005年5月22日)本书旨在成为C ++程序员应该阅读的最好的第二本书,并且成功了。 早期版本针对的是C语言的程序员,第三版本对此进行了更改,并针对Java之类的程序员。 它以易于访问(且令人愉快)的风格呈现了约50个易于记忆的经验法则及其原理。 对于C ++ 11和C ++ 14,示例和一些问题已过时,应首选“有效的现代C ++”。 [评论]

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

  • 有效的STL (Scott Meyers)这旨在对标准库中来自STL的部分进行相同的操作,就像有效的C ++对整个语言所做的一样:它提供了经验法则及其原理。 [评论]

中间

  • 更有效的C ++ (Scott Meyers)比有效C ++的经验法则还要多。 虽然不如第一本书中的重要,但还是很高兴知道。

  • 杰出的C ++ (草皮萨特)以一组难题的形式呈现,它对C ++中通过资源获取即初始化(RAII)进行适当的资源管理和异常安全性进行了最佳而透彻的讨论,此外还深入探讨了各种其他主题包括pimpl习惯用法,名称查找,良好的类设计和C ++内存模型。 [评论]

  • 更多有关Exceptional C ++的内容 (草药说明),除了讨论C ++中有效的面向对象编程以及STL的正确使用之外,还涵盖了Exceptional C ++中未涵盖的其他异常安全主题。 [评论]

  • 出色的C ++风格 (草药翻译)讨论通用编程,优化和资源管理; 本书还很好地阐述了如何通过使用非成员函数和单一职责原理来用C ++编写模块化代码。 [评论]

  • C ++编码标准 (Herb Sutter和Andrei Alexandrescu)在这里的“编码标准”并不意味着“我应该缩进我的代码多少个空格?”这本书包含101个最佳实践,习惯用法和常见陷阱,可帮助您正确编写代码,易懂,高效的C ++代码。 [评论]

  • C ++模板:完整指南 (David Vandevoorde和Nicolai M. Josuttis)这是关于模板书,因为它们在C ++ 11之前就已存在。 它涵盖了从最基础到最高级的模板元编程的所有内容,并解释了模板如何工作的每个细节(在概念上以及如何实现),并讨论了许多常见的陷阱。 附录中对“一个定义规则”(ODR)和重载分辨率具有出色的总结。 已经出版了涵盖C ++ 11,C ++ 14和C ++ 17的第二版[评论]

  • C ++ 17-完整指南 (Nicolai M. Josuttis)本书介绍了C ++ 17标准引入的所有新功能,涵盖了从简单的所有内容,例如“内联变量”,“ constexpr if”一直到“多态”。内存资源”和“使用过对齐的数据新建和删除”。


高级

  • 现代C ++设计 (Andrei Alexandrescu)关于高级通用编程技术的开创性著作。 介绍基于策略的设计,类型列表和基本的通用编程习惯用法,然后说明可以使用通用编程高效,模块化和整洁地实现多少有用的设计模式(包括小对象分配器,函子,工厂,访问者和多方法) 。 [评论]

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

  • C ++并发性实践 (安东尼·威廉姆斯),这本书涵盖C ++ 11并发性支持,包括线程库,原子库,C ++内存模型,锁和互斥体,以及设计和调试多线程应用程序的问题。 已经出版了涵盖C ++ 14和C ++ 17的第二版

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


参考样式-所有级别

  • C ++编程语言 (Bjarne Stroustrup)( 已为C ++ 11更新 )对其创建者的经典介绍。 与经典K&R并行编写,它的读法非常像它,涵盖了从核心语言到标准库,从编程范例到语言哲学的几乎所有内容。 [评论]注意:在以下问题中跟踪所有C ++标准版本: 在哪里可以找到当前的C ++标准

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

  • C ++ IO流和语言环境 (Angelika Langer和Klaus Kreft)关于本书的内容很少说,除了,如果您想了解有关流和语言环境的任何知识,那么这是找到确定答案的地方。 [评论]

C ++ 11/14/17 /…参考:

  • 在C ++ 11 / 14 / 17标准(INCITS / ISO / IEC 14882:2011/2014/2017)此,当然,是所有的最终仲裁器是或不是C ++。 但是请注意,它纯粹是作为愿意为理解它付出大量时间和精力的有经验的用户的参考。 C ++ 17标准以电子形式发布,价格为198瑞士法郎。

  • 可以使用C ++ 17标准,但似乎不是一种经济形式– 直接从ISO定价为198瑞士法郎(约合200美元)。 对于大多数人来说, 标准化前最终草案已足够(免费)。 许多人会更喜欢更新的草案 ,其中记录了C ++ 20中可能包含的新功能。

  • 新C ++概述(C ++ 11/14)( 仅PDF) (Scott Meyers)( 已针对C ++ 14更新 )这些是由Google提供的为期三天的培训课程的演示材料(幻灯片和一些讲义)斯科特·迈耶斯(Scott Meyers),他是C ++上受人尊敬的作者。 即使项目列表很短,质量也很高。

  • C ++核心准则(C ++ 11/14/17 /…) (由Bjarne Stroustrup和Herb Sutter编辑)是一个不断发展的在线文档,其中包含一组有关如何正确使用现代C ++的准则。 该指南侧重于相对较高级别的问题,例如接口,资源管理,内存管理以及影响应用程序体系结构和库设计的并发性。 该项目由Bjarne Stroustrup等人在CppCon'15上宣布,并欢迎社区的贡献。 大多数准则都补充有基本原理和示例以及有关可能的工具支持的讨论。 许多规则经过专门设计,可以由静态分析工具自动检查。

  • C ++超级常见问题解答 (Marshall Cline,Bjarne Stroustrup等)是标准C ++基金会的一项工作,旨在统一先前由Marshall Cline和Bjarne Stroustrup单独维护的C ++ FAQ,并且还加入了新的贡献。 这些项目大多以中级水平解决问题,并且通常以幽默的语气写。 并不是所有的项目都可能是最新版本的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 ++软件项目中工作,则可能需要阅读它,尽管您需要花很多精力。 新版本的第一卷预计将于2019年发布

  • 在C ++对象模型内部 (Stanley Lippman)如果您想知道在多继承方案中通常如何实现虚拟成员函数以及在内存中通常如何布置基础对象,以及所有这些如何影响性能,那么您将在这里找到有关此类主题的详尽讨论。

  • 带注释的C ++参考手册 (Bjarne Stroustrup,玛格丽特·A·埃利斯)在探索1989 C ++ 2.0版本的事实上已经过时了-尚未引入模板,异常,名称空间和新类型。 话虽如此,这本书还是遍历了整个C ++标准,解释了该语言的基本原理,可能的实现和功能。 这不是一本学习C ++编程原理和模式的书,而是一本了解C ++语言各个方面的书。

  • 《用C ++进行思考》 (Bruce Eckel,第二版,2000年)。 两卷; 是一套免费的入门级​​入门书籍。 下载: 第1 第2卷 。 不幸的是,它们被许多琐碎的错误所破坏(例如,保持临时对象自动为const ),没有正式的勘误表。 的部分第三方勘误表可在( http://www.computersciencelab.com/Eckel.htm ),但它显然不能维持。

  • 《科学与工程C ++:高级技术和示例简介》 (约翰·巴顿和李·纳克曼)这本书是一本全面而详尽的书,试图在数值方法的背景下解释和利用C ++中的所有功能。 当时它引入了几种新技术,例如“好奇重复模板模式”(CRTP,也称为Barton-Nackman技巧)。 它开创了多种技术,例如尺寸分析和自动区分。 它附带了许多可编译且有用的代码,从表达式解析器到Lapack包装器。 该代码仍在此处提供: http : //www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934 。 不幸的是,这些书的样式和C ++功能已经有些过时了,但是,这在当时是不可思议的巡回演出(1994,STL之前)。 关于动力学继承的章节有些复杂,难以理解,并且没有什么用处。 这本经典书籍的更新版本非常不错,其中包括移动语义和从STL中吸取的教训。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!