最终C++书籍指南和列表

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

与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误促进糟糕的编程风格.

请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 C++聊天室讨论您的添加.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.

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

回答

Beginner

Introductory, no previous programming experience

C++ Primer*(Stanley Lippman, Josée Lajoie, and Barbara E. Moo) (updated for C++11) Coming at 1k pages, this is a very thorough introduction into C++ that covers just about everything in the language in a very accessible format and in great detail. The fifth edition (released August 16, 2012) covers C++11. [Review]

Programming: Principles and Practice Using C++ (Bjarne Stroustrup, 2nd Edition - May 25, 2014) (updated for C++11/C++14) An introduction to programming using C++ by the creator of the language. A good read, that assumes no previous programming experience, but is not only for beginners.


*Not to be confused with C++ Primer Plus (Stephen Prata), with a significantly less favorable review.

Introductory, with previous programming experience

A Tour of C++ (Bjarne Stroustrup) (2nd edition for C++17) The "tour" is a quick (about 180 pages and 14 chapters) tutorial overview of all of standard C++ (language and standard library, and using C++11) at a moderately high level for people who already know C++ or at least are experienced programmers. This book is an extended version of the material that constitutes Chapters 2-5 of The C++ Programming Language, 4th edition.

加速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++.[评论]

Effective Modern C++(Scott Meyers)这基本上是 Effective C++的新版本,旨在让C++程序员从C++ 03过渡到C++ 11和C++ 14.

Effective STL (Scott Meyers) This aims to do the same to the part of the standard library coming from the STL what Effective C++ did to the language as a whole: It presents rules of thumb along with their rationale. [Review]


Intermediate

More Effective C++ (Scott Meyers) Even more rules of thumb than Effective C++. Not as important as the ones in the first book, but still good to know.

Exceptional C++ (Herb Sutter) Presented as a set of puzzles, this has one of the best and thorough discussions of the proper resource management and exception safety in C++ through Resource Acquisition is Initialization (RAII) in addition to in-depth coverage of a variety of other topics including the pimpl idiom, name lookup, good class design, and the C++ memory model. [Review]

More Exceptional C++ (Herb Sutter) Covers additional exception safety topics not covered in Exceptional C++, in addition to discussion of effective object-oriented programming in C++ and correct use of the STL. [Review]

Exceptional C++ Style (Herb Sutter) Discusses generic programming, optimization, and resource management; this book also has an excellent exposition of how to write modular code in C++ by using non-member functions and the single responsibility principle. [Review]

C++ Coding Standards (Herb Sutter and Andrei Alexandrescu) "Coding standards" here doesn't mean "how many spaces should I indent my code?" This book contains 101 best practices, idioms, and common pitfalls that can help you to write correct, understandable, and efficient C++ code. [Review]

C++模板:完整指南(David Vandevoorde和Nicolai M. Josuttis)这是关于在C++ 11之前存在的模板的书.它涵盖了从基础知识到一些最先进的模板元编程的所有内容,并解释了模板如何工作的每个细节(概念上和它们如何实现),并讨论了许多常见的陷阱.在附录中有一个定义规则(ODR)和重载决策的优秀摘要.甲第二版覆盖C++ 11,C++ 14和C++ 17已经被发布.[评论]

C++ 17 - The Complete Guide (Nicolai M. Josuttis) This book describes all the new features introduced in the C++17 Standard covering everything from the simple ones like 'Inline Variables', 'constexpr if' all the way up to 'Polymorphic Memory Resources' and 'New and Delete with overaligned Data'.


Advanced

Modern C++ Design (Andrei Alexandrescu) A groundbreaking book on advanced generic programming techniques. Introduces policy-based design, type lists, and fundamental generic programming idioms then explains how many useful design patterns (including small object allocators, functors, factories, visitors, and multi-methods) can be implemented efficiently, modularly, and cleanly using generic programming. [Review]

C++ Template Metaprogramming (David Abrahams and Aleksey Gurtovoy)

C++ Concurrency In Action (Anthony Williams) A book covering C++11 concurrency support including the thread library, the atomics library, the C++ memory model, locks and mutexes, as well as issues of designing and debugging multithreaded applications.

Advanced C++ Metaprogramming (Davide Di Gennaro) A pre-C++11 manual of TMP techniques, focused more on practice than theory. There are a ton of snippets in this book, some of which are made obsolete by type traits, but the techniques, are nonetheless useful to know. If you can put up with the quirky formatting/editing, it is easier to read than Alexandrescu, and arguably, more rewarding. For more experienced developers, there is a good chance that you may pick up something about a dark corner of C++ (a quirk) that usually only comes about through extensive experience.


Reference Style - All Levels

The C++ Programming Language (Bjarne Stroustrup) (updated for C++11) The classic introduction to C++ by its creator. Written to parallel the classic K&R, this indeed reads very much like it and covers just about everything from the core language to the standard library, to programming paradigms to the language's philosophy. [Review] Note: All releases of the C++ standard are tracked in this question: Where do I find the current C++ standard.

C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (updated for C++11) The introduction and reference for the C++ Standard Library. The second edition (released on April 9, 2012) covers C++11. [Review]

The C++ IO Streams and Locales (Angelika Langer and Klaus Kreft) There's very little to say about this book except that, if you want to know anything about streams and locales, then this is the one place to find definitive answers. [Review]

C++11/14/17/… References:

The C++11/14/17 Standard (INCITS/ISO/IEC 14882:2011/2014/2017) This, of course, is the final arbiter of all that is or isn't C++. Be aware, however, that it is intended purely as a reference for experienced users willing to devote considerable time and effort to its understanding. The C++17 standard is released in electronic form for 198 Swiss Francs.

The C++17 standard is available, but seemingly not in an economical form – directly from the ISO it costs 198 Swiss Francs (about $200 US). For most people, the final draft before standardization is more than adequate (and free). Many will prefer an even newer draft, documenting new features that are likely to be included in C++20.

Overview of the New C++ (C++11/14) (PDF only) (Scott Meyers) (updated for C++14) These are the presentation materials (slides and some lecture notes) of a three-day training course offered by Scott Meyers, who's a highly respected author on C++. Even though the list of items is short, the quality is high.

The C++ Core Guidelines (C++11/14/17/…) (edited by Bjarne Stroustrup and Herb Sutter) is an evolving online document consisting of a set of guidelines for using modern C++ well. The guidelines are focused on relatively higher-level issues, such as interfaces, resource management, memory management and concurrency affecting application architecture and library design. The project was announced at CppCon'15 by Bjarne Stroustrup and others and welcomes contributions from the community. Most guidelines are supplemented with a rationale and examples as well as discussions of possible tool support. Many rules are designed specifically to be automatically checkable by static analysis tools.

The C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup and others) is an effort by the Standard C++ Foundation to unify the C++ FAQs previously maintained individually by Marshall Cline and Bjarne Stroustrup and also incorporating new contributions. The items mostly address issues at an intermediate level and are often written with a humorous tone. Not all items might be fully up to date with the latest edition of the C++ standard yet.

cppreference.com (C++03/11/14/17/…) (initiated by Nate Kohl) is a wiki that summarizes the basic core-language features and has extensive documentation of the C++ standard library. The documentation is very precise but is easier to read than the official standard document and provides better navigation due to its wiki nature. The project documents all versions of the C++ standard and the site allows filtering the display for a specific version. The project was presented by Nate Kohl at CppCon'14.


Classics/Older

Note: Some information contained within these books may not be up-to-date or no longer considered best practice.

Note: Some information contained within these books may not be up-to-date or no longer considered best practice.

The Design and Evolution of C++ (Bjarne Stroustrup) If you want to know why the language is the way it is, this book is where you find answers. This covers everything before the standardization of C++.

Ruminations on C++ - (Andrew Koenig and Barbara Moo) [Review]

Advanced C++ Programming Styles and Idioms (James Coplien) A predecessor of the pattern movement, it describes many C++-specific "idioms". It's certainly a very good book and might still be worth a read if you can spare the time, but quite old and not up-to-date with current C++.

Large Scale C++ Software Design (John Lakos) Lakos explains techniques to manage very big C++ software projects. Certainly, a good read, if it only was up to date. It was written long before C++ 98 and misses on many features (e.g. namespaces) important for large-scale projects. If you need to work in a big C++ software project, you might want to read it, although you need to take more than a grain of salt with it. The first volume of a new edition is expected in 2018.

Inside the C++ Object Model (Stanley Lippman) If you want to know how virtual member functions are commonly implemented and how base objects are commonly laid out in memory in a multi-inheritance scenario, and how all this affects performance, this is where you will find thorough discussions of such topics.

The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) This book is quite outdated in the fact that it explores the 1989 C++ 2.0 version - Templates, exceptions, namespaces and new casts were not yet introduced. Saying that however, this book goes through the entire C++ standard of the time explaining the rationale, the possible implementations, and features of the language. This is not a book to learn programming principles and patterns on C++, but to understand every aspect of the C++ language.

Thinking in C++ (Bruce Eckel, 2nd Edition, 2000). Two volumes; is a tutorial style free set of intro level books. Downloads: vol 1, vol 2. Unfortunately they’re marred by a number of trivial errors (e.g. maintaining that temporaries are automatically const), with no official errata list. A partial 3rd party errata list is available at (http://www.computersciencelab.com/Eckel.htm), but it’s apparently not maintained.

Scientific and Engineering C++: An Introduction to Advanced Techniques and Examples (John Barton and Lee Nackman) It is a comprehensive and very detailed book that tried to explain and make use of all the features available in C++, in the context of numerical methods. It introduced at the time several new techniques, such as the Curiously Recurring Template Pattern (CRTP, also called Barton-Nackman trick). It pioneered several techniques such as dimensional analysis and automatic differentiation. It came with a lot of compilable and useful code, ranging from an expression parser to a Lapack wrapper. The code is still available here: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Unfortunately, the books have become somewhat outdated in the style and C++ features, however, it was an incredible tour-de-force at the time (1994, pre-STL). The chapters on dynamics inheritance are a bit complicated to understand and not very useful. An updated version of this classic book that includes move semantics and the lessons learned from the STL would be very nice.

  • @G Rassovsky:所有承诺在Y小时内教X的书.例如,24小时内学习C++.我相信所有这些书都可以避免.
  • 我讨厌踩到任何人的鞋子,但我不推荐Bruce Eckel的"Thinking in C++",尽管我尊重作者在线免费发布他的资料.本书的观点表明C++和"面向对象"编程的使用相对较差或无效,类似于GoF设计模式的不良应用.我发现这是一本有趣的编程入门书,但随着有人对编程和(特别是)计算机科学的整体熟悉,我发现纯粹以"经典"OOP术语思考的书籍对教育不利.
  • *加速C++*是从2000年开始的.我应该担心它已经过时了吗?
  • 我认为将版本的发布日期(适用的版本号)放在一起会很好.
  • @ G.Rassovsky在accu.org网站上,有一个评级的书评部分.您可以搜索C++文件.其中许多被评为"不推荐".
  • 嗨...我在清单中添加了C ++ 17-完整指南...作者是Nicolai M.Josuttis(谁都知道是C ++模板的作者之一)....这本书未列出亚马逊和Josuttis正在LeanPub上以“按您认为的价值付费”的方式提供它...认为将其放在这里可能会对他有帮助。...就书评而言,没有任何内容,并且我只读了几章,到目前为止给人的印象是“非常好”
  • 应当指出的是,C ++ Primer现在已经步入正轨,自编写以来,发生了很多事情。在代码示例中,还存在相当多的小错误,甚至是作者尚未解决的错误(没有公开的勘误表)。
  • 除了“ C ++并发性”之外,这些书中是否还有其他有关线程化应用程序的细节?只是好奇,因为这是我真正想了解的来龙去脉,有时可能会令人生畏。(这并不意味着C ++并发操作很糟糕,没有读过,只是在寻找尽可能多的**好**来源)。
  • @Anonymousapps Accelerated C ++是2000年发行的,至今仍然有用。
  • C ++模板:《完整指南》已经是第二版:https://www.amazon.com/C-Templates-Complete-Guide-2nd/dp/0321714121/ C ++标准库(包括C ++ 17):https:/ /leanpub.com/cpplibrary
  • 这个问题中的许多链接都被uBlockOrigin阻止了:(
  • 为什么在“旧/过时”部分中“掌握C ++ 17 STL”?对我来说,这是一个错误。

以上是最终C++书籍指南和列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>