这个问题试图收集每年出版的数十本不良C ++书籍中的少数珍珠。
与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C ++,而无需学习编写精良的C ++书籍。这样做太复杂了。事实上,它是如此庞大和复杂 有很多非常糟糕的C ++书籍 在那里。我们不是在谈论糟糕的风格,而是在谈论运动 明显的事实错误 和 促进糟糕的编程风格。
请编辑提供的接受答案 优质书籍 和近似的技能水平 - 优选 后 讨论你的补充 C ++聊天室。 (如果他们不同意推荐,常客可能会毫不留情地撤销你的工作。)为你亲自阅读/受益的每本书添加简短的描述/描述。随意讨论质量,标题等。符合标准的书籍将被添加到列表中。由C和C ++用户协会(ACCU)进行评论的书籍都有指向评论的链接。
*注意:常见问题解答和其他资源可以在 C ++标签信息 和下 C ++ - 常见问题解答。
初学者
介绍,没有以前的编程经验
C ++入门 *(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)(C ++第2版17)“游览”是一个快速(约180页和14章)教程概述所有标准C ++(语言和标准库, 并使用C ++ 11对于已经了解C ++或至少是经验丰富的程序员的人来说,处于中等水平。本书是构成C ++编程语言第4版第2-5章的材料的扩展版本。
加速C ++ (Andrew Koenig和Barbara Moo,第1版 - 2000年8月24日)这基本上和它一样 C ++入门,但在其四分之一的空间内这样做。这很大程度上是因为它并不试图成为一个介绍 程序设计,但介绍 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。
- 有效的STL (Scott Meyers)这个目的是对来自STL的标准库的部分做同样的事情 有效的C ++ 作为一个整体的语言做了它:它提出了经验法则及其基本原理。 [评论]
中间
更有效的C ++ (斯科特迈耶斯)更多的经验法则 有效的C ++。没有第一本书那么重要,但仍然很有用。
特殊的C ++ (Herb Sutter)作为一组谜题提出,除了深入报道各种其他内容外,还通过资源获取初始化(RAII)对C ++中适当的资源管理和异常安全进行了最佳和彻底的讨论。主题包括pimpl成语,名称查找,良好的类设计和C ++内存模型。 [评论]
更优秀的C ++ (Herb Sutter)涵盖了未涵盖的其他异常安全主题 特殊的C ++,除了讨论C ++中有效的面向对象编程和正确使用STL之外。 [评论]
出色的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 ++并发行动 (Anthony Williams)一本涵盖C ++ 11并发支持的书,包括线程库,原子库,C ++内存模型,锁和互斥,以及设计和调试多线程应用程序的问题。
高级C ++元编程 (Davide Di Gennaro)TMP技术的前C ++ 11手册,更多地关注实践而不是理论。本书中有大量的片段,其中一些片段特征已经过时,但这些技巧仍然有用。如果你能忍受古怪的格式/编辑,它比Alexandrescu更容易阅读,并且可以说更有价值。对于更有经验的开发人员来说,很有可能你会发现一些关于C ++(一个怪癖)的黑暗角落,这通常只是通过丰富的经验来实现的。
参考风格 - 所有级别
C ++编程语言 (Bjarne Stroustrup)(针对C ++ 11进行了更新)其创建者对C ++的经典介绍。写得与经典的K&R并行,这确实非常像它,涵盖了从核心语言到标准库,编程范式到语言哲学的所有内容。 [评论] 注意:此问题中跟踪了C ++标准的所有版本: 我在哪里可以找到当前的C ++标准。
C ++标准库教程和参考 (Nicolai Josuttis)(针对C ++ 11进行了更新) 该 C ++标准库的介绍和参考。第二版(2012年4月9日发布)涵盖了C ++ 11。 [评论]
C ++ IO Streams和Locales (Angelika Langer和Klaus Kreft)除了如果你想了解关于流和语言环境的任何内容之外,对这本书几乎没有什么可说的,那么这就是找到明确答案的地方。 [评论]
C ++ 11/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)如果你想知道虚拟成员函数是如何被普遍实现的,以及基本对象在多继承场景中如何通常在内存中布局,以及所有这些如何影响性能,那么你可以在这里找到对这些函数的详细讨论。主题。
Annotated C ++参考手册 (Bjarne Stroustrup,Margaret A. Ellis)这本书已经过时了,因为它探讨了1989 C ++ 2.0版本 - 模板,异常,名称空间和新演员表尚未引入。然而,这本书说明了本书贯穿整个C ++标准,解释了该语言的基本原理,可能的实现和功能。这不是一本学习C ++编程原理和模式的书,而是了解C ++语言的各个方面。
用C ++思考 (布鲁斯埃克尔)两卷;是一种教程风格 自由 一套介绍级别的书籍。下载: 第1卷, 第2卷。不幸的是,它们被许多微不足道的错误所破坏(例如,自动保持临时性 const
),没有官方勘误表。部分3RD 派对勘误列表可在(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学到的经验教训将是非常好的。
初学者
介绍,没有以前的编程经验
C ++入门 *(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)(C ++第2版17)“游览”是一个快速(约180页和14章)教程概述所有标准C ++(语言和标准库, 并使用C ++ 11对于已经了解C ++或至少是经验丰富的程序员的人来说,处于中等水平。本书是构成C ++编程语言第4版第2-5章的材料的扩展版本。
加速C ++ (Andrew Koenig和Barbara Moo,第1版 - 2000年8月24日)这基本上和它一样 C ++入门,但在其四分之一的空间内这样做。这很大程度上是因为它并不试图成为一个介绍 程序设计,但介绍 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。
- 有效的STL (Scott Meyers)这个目的是对来自STL的标准库的部分做同样的事情 有效的C ++ 作为一个整体的语言做了它:它提出了经验法则及其基本原理。 [评论]
中间
更有效的C ++ (斯科特迈耶斯)更多的经验法则 有效的C ++。没有第一本书那么重要,但仍然很有用。
特殊的C ++ (Herb Sutter)作为一组谜题提出,除了深入报道各种其他内容外,还通过资源获取初始化(RAII)对C ++中适当的资源管理和异常安全进行了最佳和彻底的讨论。主题包括pimpl成语,名称查找,良好的类设计和C ++内存模型。 [评论]
更优秀的C ++ (Herb Sutter)涵盖了未涵盖的其他异常安全主题 特殊的C ++,除了讨论C ++中有效的面向对象编程和正确使用STL之外。 [评论]
出色的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 ++并发行动 (Anthony Williams)一本涵盖C ++ 11并发支持的书,包括线程库,原子库,C ++内存模型,锁和互斥,以及设计和调试多线程应用程序的问题。
高级C ++元编程 (Davide Di Gennaro)TMP技术的前C ++ 11手册,更多地关注实践而不是理论。本书中有大量的片段,其中一些片段特征已经过时,但这些技巧仍然有用。如果你能忍受古怪的格式/编辑,它比Alexandrescu更容易阅读,并且可以说更有价值。对于更有经验的开发人员来说,很有可能你会发现一些关于C ++(一个怪癖)的黑暗角落,这通常只是通过丰富的经验来实现的。
参考风格 - 所有级别
C ++编程语言 (Bjarne Stroustrup)(针对C ++ 11进行了更新)其创建者对C ++的经典介绍。写得与经典的K&R并行,这确实非常像它,涵盖了从核心语言到标准库,编程范式到语言哲学的所有内容。 [评论] 注意:此问题中跟踪了C ++标准的所有版本: 我在哪里可以找到当前的C ++标准。
C ++标准库教程和参考 (Nicolai Josuttis)(针对C ++ 11进行了更新) 该 C ++标准库的介绍和参考。第二版(2012年4月9日发布)涵盖了C ++ 11。 [评论]
C ++ IO Streams和Locales (Angelika Langer和Klaus Kreft)除了如果你想了解关于流和语言环境的任何内容之外,对这本书几乎没有什么可说的,那么这就是找到明确答案的地方。 [评论]
C ++ 11/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)如果你想知道虚拟成员函数是如何被普遍实现的,以及基本对象在多继承场景中如何通常在内存中布局,以及所有这些如何影响性能,那么你可以在这里找到对这些函数的详细讨论。主题。
Annotated C ++参考手册 (Bjarne Stroustrup,Margaret A. Ellis)这本书已经过时了,因为它探讨了1989 C ++ 2.0版本 - 模板,异常,名称空间和新演员表尚未引入。然而,这本书说明了本书贯穿整个C ++标准,解释了该语言的基本原理,可能的实现和功能。这不是一本学习C ++编程原理和模式的书,而是了解C ++语言的各个方面。
用C ++思考 (布鲁斯埃克尔)两卷;是一种教程风格 自由 一套介绍级别的书籍。下载: 第1卷, 第2卷。不幸的是,它们被许多微不足道的错误所破坏(例如,自动保持临时性 const
),没有官方勘误表。部分3RD 派对勘误列表可在(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学到的经验教训将是非常好的。