最终C ++书指南和列表 [英] The Definitive C++ Book Guide and List

查看:200
本文介绍了最终C ++书指南和列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题试图收集几十个坏的C ++书中每年出版的几个珍珠。



与许多其他编程语言在互联网上找到的教程,几乎没有能够快速拿起C ++,而不学习一本写得很好的C ++书。这是太大和复杂的做这个。事实上,它是如此大和复杂,有很多非常糟糕的C ++书 在那里。我们不是在讨论坏的风格,而是像体育运动这样明显的事实错误,并且



请编辑接受的答案,在 之后 提供优质图书< href =http://chat.stackoverflow.com/rooms/10/loungec> C ++聊天室 。 (如果他们不同意一个建议,常客可能无情地撤消你的工作。)添加一个简短的说明/描述你每个书,你已经亲自阅读/受益。随意讨论质量,标题等。符合标准的书籍将被添加到列表中。具有C和C ++用户协会(ACCU)的评论的书籍具有到评论的链接。



注意:常见问题和其他资源可以在 C ++标签信息 c ++ - faq 。对于C也有类似的帖子:最终C书指南和列表< a>

初学者



介绍,没有以前的编程经验





介绍性,具有以前的编程经验




  • C ++ Primer *(Stanley Lippman,JoséeLajoie和Barbara E. Moo)(更新为C ++ 11 )在1k页面上,这是一个非常彻底的C ++简介涵盖了语言中的一切,以非常容易接受的格式和非常详细的。第五版(2012年8月16日发布)涵盖了C ++ 11。 [Review]


  • C ++之旅 (Bjarne Stroustrup)(EBOOK) tour是一个快速(约180页和14章)教程概述所有的标准C ++(语言和标准库,和使用C ++ 11 )在一个适中的高水平为已经知道C ++或至少是有经验的程序员。


  • 加速C ++ (Andrew Koenig和Barbara Moo)这基本上涵盖了与 C ++ Primer 相同的理由>,但在四分之一的空间上。这主要是因为它并不试图成为编程的介绍,而是对以前用其他语言编程的人来说 C ++ 的介绍。它有一个更陡峭的学习曲线,但是,对于那些可以应付这种情况,这是一个非常紧凑的介绍语言。 (历史上,它是第一本使用现代方法教授语言的初学者书籍,打破了新局面。) [评论]


  • Thinking in C ++ (Bruce Eckel)两卷;是一组教学风格免费的介绍级书。下载:第1卷 vol 2 。不幸的是,它们有一些琐碎的错误(例如维护暂时自动 const ),没有官方勘误表。部分3 rd 方案勘误表可在( http://www.computersciencelab.com/Eckel。 htm ),但它显然无法维护。





*不要与 C ++ Primer Plus (Stephen Prata)混淆,后者明显少于有利的审核



最佳做法




  • 有效的C ++ (Scott Meyers)这是为了成为最好的第二个书C +​​+程序员应该阅读,它成功了。早期版本的目标是来自C的程序员,第三版改变了这一点,并把来自Java等语言的程序员作为目标。它提供了〜50容易记住的经验规则以及他们的理由,在一个非常方便(和愉快)的风格。对于C ++ 11和C ++ 14,示例和一些问题已经过时,应该优先考虑有效的现代C ++。 [Review]


  • 有效的现代C ++ (Scott Meyers)这基本上是新版本的 Effective C ++ ,旨在让C ++程序员从C ++ 03转换到C ++ 11和C ++ 14。


  • 有效的STL (Scott Meyers)这样做的目的是对标准库中来自STL的有效C ++ 对整个语言所做的部分做同样的事情:它提出了经验法则及其理由。 [评论]






中级




  • 更有效的C ++ (Scott Meyers)甚至更多的经验规则 Effective C ++


  • 例外的C ++ (Herb Sutter)作为一组谜题,这是C ++中对资源管理和异常安全的最好和彻底的讨论之一通过资源获取是初始化(RAII),除了深入涵盖各种其他主题,包括pimpl成语,名称查找,良好的类设计和C ++内存模型。 [Review]


  • 更多异常C ++ (Herb Sutter)涵盖其他异常安全主题除了在C ++中讨论有效的面向对象编程和正确使用STL之外,不在异常C ++ 中讨论。 [Review]


  • 异常的C ++样式 (Herb Sutter)讨论通用编程,优化,资源管理;这本书还有一个很好的阐述如何使用非成员函数和单责任原则在C ++中编写模块化代码。 [Review]


  • C ++编码标准 (Herb Sutter和Andrei Alexandrescu)编码标准这里并不意味着应该有多少空格应该缩进我的代码?本书包含101最佳实践,成语和常见的陷阱,可以帮助您编写正确,可理解和有效的C ++代码。 [Review]


  • C ++范本:完整指南 (David Vandevoorde和Nicolai M 。Josuttis)这是关于模板的书,因为它们在C ++ 11之前存在。它涵盖从基础知识到一些最先进的模板元编程的所有内容,并解释模板如何工作的每个细节(概念上和如何实现),并讨论许多常见的陷阱。在附录中有单一定义规则(ODR)和重载分辨率的优秀摘要。 第二版预计于2017年。 [评论]







高级








参考样式 - 所有级别




  • C ++程序设计语言 (Bjarne Stroustrup)(更新为C ++ 11 )其创建者对C ++的经典介绍。写作与经典的K& R并行,这确实读得非常相似,涵盖从核心语言到标准库,编程范式到语言哲学的一切。 [Review]


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


  • C ++ IO流和区域设置 (Angelika Langer和Klaus Kreft )这本书很少说,除非,如果你想知道关于流和语言环境的任何事情,那么这是一个找到确定答案的地方。 [Review]




C ++ 11/14参考文献:








经典/古老



请注意:这些图书中包含的部分信息可能不是最新的或不再被视为最佳做法。 p>


  • 设计和C ++的演变 (Bjarne Stroustrup)如果你想知道为什么语言是这样,这本书是你找到答案的地方。这涵盖了C ++标准化之前的所有内容。


  • 在C ++上的反思 - (Andrew Koenig和Barbara Moo) [评论]


  • (James Coplien)模式运动的前身,它描述了许多C ++特定的成语。这当然是一本非常好的书,如果你可以节省时间,可能还是值得一读,但相当旧,不是最新的与当前的C + +。


  • 大型C ++软件设计 (John Lakos)Lakos解释了管理非常大的C ++软件项目的技术。当然一个很好的阅读,如果它只是最新的。它很久以前写在C ++ 98之前,并且缺少对大型项目很重要的许多功能(例如命名空间)。如果你需要在一个大的C ++软件项目中工作,你可能想读它,虽然你需要多一点盐。新版本的第一卷是预计在2015年


  • 在C ++对象模型中 (Stanley Lippman)如果您想要知道虚拟成员函数是如何被普遍实现的,以及基本对象如何在多继承场景中在内存中通常布局,以及这些对所有性能的影响,这里你将找到关于这些主题的详细讨论。


  • <注释的C ++参考手册 (Bjarne Stroustrup,Margaret A. Ellis)这本书已经过时了,因为它探索了1989 C ++ 2.0版本 - 模板,异常,命名空间和新模型尚未引入。然而,这是书通过整个C ++标准的时间解释的理由,语言的可能的实现和功能。这不是一本没有学习C ++编程原理和模式的书,而是为了理解C ++语言的每一个方面。



This question attempts to collect the few pearls among the dozens of bad C++ books that are published every year.

Unlike many other programming languages, which are often picked up on the go from tutorials found on the Internet, few are able to quickly pick up C++ without studying a well-written C++ book. It is way too big and complex for doing this. In fact, it is so big and complex, that there are very many very bad C++ books out there. And we are not talking about bad style, but things like sporting glaringly obvious factual errors and promoting abysmally bad programming styles.

Please edit the accepted answer to provide quality books and an approximate skill level — preferably after discussing your addition in the C++ chat room. (The regulars might mercilessly undo your work if they disagree with a recommendation.) Add a short blurb/description about each book that you have personally read/benefited from. Feel free to debate quality, headings, etc. Books that meet the criteria will be added to the list. Books that have reviews by the Association of C and C++ Users (ACCU) have links to the review.

Note: FAQs and other resources can be found in the C++ tag info and under . There is also a similar post for C: The Definitive C Book Guide and List

解决方案

Beginner

Introductory, no previous programming experience

  • Programming: Principles and Practice Using C++ (Bjarne Stroustrup) (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.

Introductory, with 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]

  • A Tour of C++ (Bjarne Stroustrup) (EBOOK) 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.

  • Accelerated C++ (Andrew Koenig and Barbara Moo) This basically covers the same ground as the C++ Primer, but does so on a fourth of its space. This is largely because it does not attempt to be an introduction to programming, but an introduction to C++ for people who've previously programmed in some other language. It has a steeper learning curve, but, for those who can cope with this, it is a very compact introduction into the language. (Historically, it broke new ground by being the first beginner's book to use a modern approach at teaching the language.) [Review]

  • Thinking in C++ (Bruce Eckel) 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.

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

Best practices

  • Effective C++ (Scott Meyers) This was written with the aim of being the best second book C++ programmers should read, and it succeeded. Earlier editions were aimed at programmers coming from C, the third edition changes this and targets programmers coming from languages like Java. It presents ~50 easy-to-remember rules of thumb along with their rationale in a very accessible (and enjoyable) style. For C++11 and C++14 the examples and a few issues are outdated and Effective Modern C++ should be preferred. [Review]

  • Effective Modern C++ (Scott Meyers) This is basically the new version of Effective C++, aimed at C++ programmers making the transition from C++03 to C++11 and 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 nonmember 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++ Templates: The Complete Guide (David Vandevoorde and Nicolai M. Josuttis) This is the book about templates as they existed before C++11. It covers everything from the very basics to some of the most advanced template metaprogramming and explains every detail of how templates work (both conceptually and at how they are implemented) and discusses many common pitfalls. Has excellent summaries of the One Definition Rule (ODR) and overload resolution in the appendices. A second edition is scheduled for 2017. [Review]


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 multimethods) 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 typetraits, 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 alike it and covers just about everything from the core language to the standard library, to programming paradigms to the language's philosophy. [Review]

  • 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 References:

  • The C++ Standard (INCITS/ISO/IEC 14882-2011) 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. As usual, the first release was quite expensive ($300+ US), but it has now been released in electronic form for $60US.

  • The C++14 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++17.

  • Overview of the New C++ (C++11/14) (PDF only) (Scott Meyers) (updated for C++1y/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.

  • 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 2015.

  • 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 is 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 not learn programming principles and patterns on C++, but to understand every aspect of the C++ language.

这篇关于最终C ++书指南和列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆