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


4243

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

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

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

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

Answers:


4886

初学者

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

  • 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,第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,示例和一些问题已过时,应首选“有效的现代C ++”。[评论]

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

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

中间

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

  • 杰出的C ++(草皮萨特)以一系列难题的形式呈现,它对资源通过初始化初始化(RAII)来进行C ++中正确的资源管理和异常安全性进行了最佳而透彻的讨论,此外还深入探讨了各种其他主题,包括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 ++中的函数式编程(IvanČukić)这本书向读者介绍了现代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的和香草萨特编辑)是由一组准则的使用现代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 ++软件项目中工作,则可能需要阅读它,尽管您需要花很多精力。新版本的第一卷于2019年发布

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

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

  • 《用C ++进行思考》(Bruce Eckel,第二版,2000年)。两卷;是一套免费的入门级​​入门书籍。下载:第1 第2卷。不幸的是,它们被许多琐碎的错误所破坏(例如,保持临时状态是自动的const),没有正式的勘误表。的部分3方勘误表可在( 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中吸取的教训。


402
@G Rassovsky:所有承诺在Y小时内教授X的书籍。例如,在24小时内学习C ++。我相信最好避免使用所有此类书籍。
akhil_mittal

115
我讨厌踩任何人的鞋子,但我不推荐Bruce Eckel的“ Thinking in C ++”,尽管我尊重作者免费在网上发布其材料。该书的观点表明,与GoF设计模式的不良应用类似,C ++和“面向对象”编程的使用相对较差或效率不高。我发现它总体上是一本有趣的编程入门书,但是随着人们对编程以及(尤其是)整个计算机科学的熟悉,我发现这些书纯粹以“经典的” OOP术语来考虑,不利于教育。

30
@ acc.org网站上的@ G.Rassovsky,有一个带有评分的书评部分。您可以搜索C ++。其中许多被评为“不推荐”。
Zaphod Beeblebrox

82
加速的C ++是2000年的版本。我应该担心它已经过时了吗?
AutonomousApps

59
我认为最好列出该版本的发布日期(在适当的地方加上版本号)。
亚伦·霍尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.