In dieser Frage wird versucht, die wenigen Perlen unter den Dutzenden von schlechten C++-Büchern zu sammeln, die jedes Jahr veröffentlicht werden.
Im Gegensatz zu vielen anderen Programmiersprachen, die man sich oft mit Hilfe von Tutorials aus dem Internet aneignet, sind nur wenige in der Lage, C++ schnell zu erlernen, ohne ein gut geschriebenes C++-Buch zu studieren. Dafür ist die Sprache viel zu groß und komplex. Tatsächlich ist es so umfangreich und komplex, dass es sehr viele sehr schlechte C++-Bücher gibt. Und wir reden hier nicht von schlechtem Stil, sondern von Dingen wie krass offensichtlichen sachlichen Fehlern und der Förderung abgrundtief schlechter Programmierstile.
Bitte editieren Sie die akzeptierte Antwort, um qualitative Bücher und ein ungefähres Fähigkeitsniveau anzugeben - vorzugsweise nach Diskussion Ihrer Ergänzung im C++-Chatraum. (Die Stammgäste könnten Ihre Arbeit gnadenlos rückgängig machen, wenn sie mit einer Empfehlung nicht einverstanden sind). Fügen Sie zu jedem Buch, das Sie persönlich gelesen/genutzt haben, einen kurzen Text/Beschreibung hinzu. Es steht Ihnen frei, über Qualität, Überschriften usw. zu diskutieren. Bücher, die die Kriterien erfüllen, werden in die Liste aufgenommen. Bücher, die von der Association of C and C++ Users (ACCU) rezensiert wurden, haben Links zu den Rezensionen.
*Hinweis: Häufig gestellte Fragen (FAQs) und andere Ressourcen finden Sie im C++ tag info und unter [tag:c++-faq].
A Tour of C++ (Bjarne Stroustrup) (2. Auflage für C++17) Die "Tour" ist ein schneller (ca. 180 Seiten und 14 Kapitel) tutorieller Überblick über den gesamten Standard C++ (Sprache und Standardbibliothek, und die Verwendung von C++11) auf mäßig hohem Niveau für Leute, die C++ bereits kennen oder zumindest erfahrene Programmierer sind. Dieses Buch ist eine erweiterte Version des Materials, das die Kapitel 2-5 von The C++ Programming Language, 4th edition darstellt.
Accelerated C++ (Andrew Koenig und Barbara Moo, 1. Auflage - 24. August 2000) Dieses Buch deckt im Wesentlichen den gleichen Bereich ab wie die C++-Fibel, allerdings auf einem Viertel des Platzes. Das liegt vor allem daran, dass es nicht versucht, eine Einführung in die Programmierung zu sein, sondern eine Einführung in C++ für Leute, die zuvor in einer anderen Sprache programmiert haben. Es hat eine steilere Lernkurve, aber für diejenigen, die damit umgehen können, ist es eine sehr kompakte Einführung in die Sprache. (Historisch gesehen hat es Neuland betreten, da es das erste Einsteigerbuch war, das einen modernen Ansatz für die Vermittlung der Sprache verfolgte.) Trotzdem ist das C++ das es lehrt, ist rein C++98. [Rezension]
Effective C++](http://www.amazon.com/dp/0321334876/) (Scott Meyers, 3. Auflage - 22. Mai 2005) Dies wurde mit dem Ziel geschrieben, das beste zweite Buch zu sein, das C++-Programmierer lesen sollten, und das ist ihm gelungen. Frühere Ausgaben richteten sich an Programmierer, die von C kamen, die dritte Ausgabe ändert dies und zielt auf Programmierer, die von Sprachen wie Java kommen. Es präsentiert ~50 leicht zu merkende Faustregeln zusammen mit ihrer Begründung in einem sehr zugänglichen (und angenehmen) Stil. Für C++11 und C++14 sind die Beispiele und einige Themen veraltet und Effective Modern C++ sollte vorgezogen werden. [Rezension]
Effective Modern C++ (Scott Meyers) Dies ist im Grunde die neue Version von Effective C++ und richtet sich an C++-Programmierer, die den Übergang von C++03 zu C++11 und C++14 vollziehen.
More Effective C++ (Scott Meyers) Noch mehr Faustregeln als Effective C++. Nicht so wichtig wie die im ersten Buch, aber trotzdem gut zu wissen.
Exceptional C++](http://www.amazon.com/dp/0201615622/) (Herb Sutter) Präsentiert als eine Reihe von Rätseln, bietet dieses Buch eine der besten und gründlichsten Diskussionen über das richtige Ressourcenmanagement und die Ausnahmesicherheit in C++ durch Resource Acquisition is Initialization (RAII), zusätzlich zur eingehenden Behandlung einer Vielzahl anderer Themen, einschließlich des pimpl Idioms, der Namenssuche, des guten Klassendesigns und des C++ Speichermodells. [Rezension]
More Exceptional C++ (Herb Sutter) Behandelt zusätzliche Themen der Ausnahmesicherheit, die in Exceptional C++ nicht behandelt werden, zusätzlich zur Diskussion der effektiven objektorientierten Programmierung in C++ und der korrekten Verwendung der STL. [Rezension]
Exceptional C++ Style (Herb Sutter) Diskutiert generische Programmierung, Optimierung und Ressourcenmanagement; dieses Buch hat auch eine ausgezeichnete Darstellung, wie man modularen Code in C++ schreibt, indem man Nichtmitglieder-Funktionen und das Prinzip der einzigen Verantwortung verwendet. [Rezension]
C++ Coding Standards (Herb Sutter und Andrei Alexandrescu) "Coding Standards" bedeutet hier nicht "wie viele Leerzeichen sollte ich meinen Code einrücken?" Dieses Buch enthält 101 bewährte Verfahren, Redewendungen und häufige Fallstricke, die Ihnen helfen können, korrekten, verständlichen und effizienten C++-Code zu schreiben. [Rezension]
C++ Templates: The Complete Guide (David Vandevoorde und Nicolai M. Josuttis) Dies ist das Buch über Templates, wie sie vor C++11 existierten. Es deckt alles ab, von den allerersten Grundlagen bis hin zu einigen der fortgeschrittensten Template-Metaprogrammierungen, und erklärt jedes Detail, wie Templates funktionieren (sowohl konzeptionell als auch in Bezug auf ihre Implementierung) und diskutiert viele häufige Fallstricke. In den Anhängen finden sich hervorragende Zusammenfassungen der One Definition Rule (ODR) und der Überlastauflösung. Eine zweite Auflage, die C++11, C++14 und C++17 abdeckt, wurde bereits veröffentlicht. [Rezension]
Modern C++ Design (Andrei Alexandrescu) Ein bahnbrechendes Buch über fortgeschrittene generische Programmiertechniken. Führt in richtlinienbasiertes Design, Typlisten und grundlegende generische Programmieridiome ein und erklärt dann, wie viele nützliche Entwurfsmuster (einschließlich kleiner Objektallokatoren, Funktoren, Fabriken, Besucher und Multimethoden) effizient, modular und sauber mit generischer Programmierung implementiert werden können. [Rezension]
C++ Template Metaprogramming (David Abrahams und Aleksey Gurtovoy)
C++ Concurrency In Action (Anthony Williams) Ein Buch, das die Unterstützung der Gleichzeitigkeit in C++11 behandelt, einschließlich der Thread-Bibliothek, der Atomics-Bibliothek, des C++-Speichermodells, der Sperren und Mutexe sowie Fragen des Entwurfs und der Fehlersuche bei Anwendungen mit mehreren Threads. Eine zweite Auflage, die C++14 und C++17 abdeckt, wurde bereits veröffentlicht.
The C++ Programming Language (Bjarne Stroustrup) (aktualisiert für C++11) Die klassische Einführung in C++ von seinem Schöpfer. Dieses Buch wurde parallel zum Klassiker K&R geschrieben und liest sich in der Tat sehr ähnlich. Es deckt so ziemlich alles ab, von der Kernsprache über die Standardbibliothek bis hin zu Programmierparadigmen und der Philosophie der Sprache. [Review] Hinweis: Alle Versionen des C++-Standards werden in dieser Frage verfolgt: Wo finde ich den aktuellen C++-Standard.
C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (aktualisiert für C++11) Die Einführung und Referenz für die C++ Standard Library. Die zweite Auflage (erschienen am 9. April 2012) deckt C++11 ab. [Rezension]
Die C++ IO Streams und Locales (Angelika Langer und Klaus Kreft) Zu diesem Buch gibt es nicht viel zu sagen, außer, dass es die einzige Stelle ist, an der man endgültige Antworten findet, wenn man etwas über Streams und Locales wissen will. [Rezension] C++11/14/17/... Referenzen:
Der C++11/14/17-Standard (INCITS/ISO/IEC 14882:2011/2014/2017)_ Dieser Standard ist natürlich die letzte Instanz für alles, was C++ ist oder nicht ist. Seien Sie sich jedoch bewusst, dass er lediglich als Referenz für erfahrene Benutzer gedacht ist, die bereit sind, viel Zeit und Mühe in sein Verständnis zu investieren. Der C++17-Standard ist in elektronischer Form für 198 Schweizer Franken erhältlich.
Der C++17-Standard ist erhältlich, aber anscheinend nicht in einer kostengünstigen Form - direkt von der ISO kostet er 198 Schweizer Franken (etwa 200 US-Dollar). Für die meisten Leute ist der letzte Entwurf vor der Standardisierung mehr als ausreichend (und kostenlos). Viele werden einen noch neueren Entwurf bevorzugen, der neue Funktionen dokumentiert, die wahrscheinlich in C++20 enthalten sein werden.
Overview of the New C++ (C++11/14) (PDF only) (Scott Meyers) (Aktualisiert für C++14) Dies sind die Präsentationsmaterialien (Folien und einige Vorlesungsnotizen) eines dreitägigen Schulungskurses, der von Scott Meyers angeboten wurde, der ein hoch angesehener Autor über C++ ist. Auch wenn die Liste der Themen kurz ist, ist die Qualität hoch.
Die C++ Core Guidelines (C++11/14/17/...) (herausgegeben von Bjarne Stroustrup und Herb Sutter) ist ein sich ständig weiterentwickelndes Online-Dokument, das aus einer Reihe von Richtlinien für die gute Verwendung von modernem C++ besteht. Die Richtlinien konzentrieren sich auf relativ übergeordnete Themen wie Schnittstellen, Ressourcenverwaltung, Speicherverwaltung und Gleichzeitigkeit, die die Anwendungsarchitektur und das Bibliotheksdesign betreffen. Das Projekt wurde [auf der CppCon'15 von Bjarne Stroustrup und anderen angekündigt] (https://isocpp.org/blog/2015/09/bjarne-stroustrup-announces-cpp-core-guidelines) und begrüßt Beiträge aus der Community. Die meisten Richtlinien werden mit einer Begründung und Beispielen sowie Diskussionen über mögliche Werkzeugunterstützung ergänzt. Viele Regeln sind speziell so konzipiert, dass sie von statischen Analysewerkzeugen automatisch überprüft werden können.
Die [C++ Super-FAQ] (https://isocpp.org/faq) (Marshall Cline, Bjarne Stroustrup und andere) ist ein Versuch der Standard C++ Foundation, die C++-FAQs, die zuvor von Marshall Cline und Bjarne Stroustrup einzeln gepflegt wurden, zu vereinheitlichen und auch neue Beiträge aufzunehmen. Die Artikel behandeln meist Themen auf mittlerem Niveau und sind oft in einem humorvollen Ton geschrieben. Es kann sein, dass noch nicht alle Artikel mit der neuesten Ausgabe des C++-Standards übereinstimmen.
Hinweis: Einige der in diesen Büchern enthaltenen Informationen sind möglicherweise nicht mehr aktuell oder gelten nicht mehr als Best Practice.
The Design and Evolution of C++ (Bjarne Stroustrup) Wenn Sie wissen wollen, warum die Sprache so ist, wie sie ist, finden Sie in diesem Buch die Antworten. Es behandelt alles vor der Standardisierung von C++.
Ruminations on C++ - (Andrew Koenig und Barbara Moo) [Rezension]
Advanced C++ Programming Styles and Idioms (James Coplien) Ein Vorläufer der Pattern-Bewegung, in dem viele C++-spezifische "Idiome" beschrieben werden. Es ist sicherlich ein sehr gutes Buch und könnte immer noch lesenswert sein, wenn Sie die Zeit erübrigen können, aber es ist ziemlich alt und nicht auf dem neuesten Stand von C++.
Large Scale C++ Software Design (John Lakos) Lakos erklärt Techniken zur Verwaltung sehr großer C++-Softwareprojekte. Sicherlich eine gute Lektüre, wenn sie nur auf dem neuesten Stand wäre. Es wurde lange vor C++ 98 geschrieben und lässt viele Funktionen (z.B. Namespaces) vermissen, die für große Projekte wichtig sind. Wenn Sie in einem großen C++-Softwareprojekt arbeiten müssen, sollten Sie es vielleicht lesen, auch wenn Sie es mit mehr als nur einem Körnchen Salz genießen sollten. Der erste Band einer Neuauflage ist [voraussichtlich 2019] (http://www.amazon.com/dp/0201717069).
Inside the C++ Object Model (Stanley Lippman) Wenn Sie wissen wollen, wie virtuelle Mitgliedsfunktionen üblicherweise implementiert werden und wie Basisobjekte in einem Szenario mit Mehrfachvererbung üblicherweise im Speicher angeordnet sind, und wie sich all dies auf die Leistung auswirkt, finden Sie hier gründliche Erörterungen solcher Themen.
The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) Dieses Buch ist ziemlich veraltet, da es die Version C++ 2.0 von 1989 behandelt - Templates, Ausnahmen, Namespaces und neue Casts waren noch nicht eingeführt. Dennoch wird in diesem Buch der gesamte damalige C++-Standard behandelt, wobei die Gründe, die möglichen Implementierungen und die Merkmale der Sprache erklärt werden. Dies ist kein Buch zum Erlernen von Programmierprinzipien und -mustern in C++, sondern zum Verstehen aller Aspekte der Sprache C++.
Thinking in C++ (Bruce Eckel, 2. Auflage, 2000). Zwei Bände; es handelt sich um eine Reihe von kostenlosen Einführungsbüchern im Tutorial-Stil. Zum Herunterladen: Band 1, Band 2. Leider sind sie durch eine Reihe von trivialen Fehlern verunstaltet (z.B. die Behauptung, dass Temporaries automatisch const
sind), und es gibt keine offizielle Errata-Liste. Eine partielle 3rd party errata list ist verfügbar unter (http://www.computersciencelab.com/Eckel.htm), aber sie wird offensichtlich nicht gepflegt.
Scientific and Engineering C++: An Introduction to Advanced Techniques and Examples](https://www.amazon.com/Scientific-Engineering-Introduction-Advanced-Techniques/dp/0201533936) (John Barton und Lee Nackman) Es ist ein umfassendes und sehr detailliertes Buch, das versucht, alle in C++ verfügbaren Funktionen im Zusammenhang mit numerischen Methoden zu erklären und zu nutzen. Es führte damals mehrere neue Techniken ein, wie das Curiously Recurring Template Pattern (CRTP, auch Barton-Nackman-Trick genannt). Es leistete Pionierarbeit bei verschiedenen Techniken wie der Dimensionsanalyse und der automatischen Differenzierung. Es wurde mit einer Menge kompilierbaren und nützlichen Codes ausgeliefert, von einem Ausdrucksparser bis zu einem Lapack-Wrapper. Der Code ist immer noch hier verfügbar: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Leider sind die Bücher in Bezug auf den Stil und die C++-Funktionen etwas veraltet, aber zu der Zeit (1994, vor STL) war es eine unglaubliche Meisterleistung. Die Kapitel über dynamische Vererbung sind etwas kompliziert zu verstehen und nicht sehr nützlich. Eine aktualisierte Version dieses Klassikers, die die Bewegungssemantik und die aus der STL gezogenen Lehren enthält, wäre sehr schön.