Das endgültige C ++ - Buchhandbuch und die Liste

4243

Diese Frage 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 häufig von Tutorials im Internet gelernt werden, können nur wenige schnell C ++ lernen, ohne ein gut geschriebenes C ++ - Buch zu studieren. Es ist viel zu groß und komplex dafür. Tatsächlich ist es so groß und komplex, dass es sehr viele sehr schlechte C ++ - Bücher gibt. Und wir sprechen nicht über schlechten Stil, sondern über Dinge wie offensichtlich offensichtliche sachliche Fehler und die Förderung von miserabel schlechten Programmierstilen .

Bitte bearbeiten Sie die akzeptierte Antwort, um qualitativ hochwertige Bücher und ein ungefähres Qualifikationsniveau bereitzustellen - vorzugsweise nachdem Sie Ihre Hinzufügung im C ++ - Chatraum besprochen haben . (Die Stammgäste können Ihre Arbeit gnadenlos rückgängig machen, wenn sie einer Empfehlung nicht zustimmen.) Fügen Sie einen kurzen Klappentext / eine kurze Beschreibung zu jedem Buch hinzu, das Sie persönlich gelesen / von dem Sie profitiert haben. Sie können gerne über Qualität, Überschriften usw. diskutieren. Bücher, die die Kriterien erfüllen, werden der Liste hinzugefügt. Bücher mit Rezensionen der Association of C and C ++ Users (ACCU) enthalten Links zur Rezension.

* Hinweis: FAQs und andere Ressourcen finden Sie in den C ++ - Tag-Informationen und darunter.

sbi
quelle

Antworten:

4889

Anfänger

Einführend, keine Programmiererfahrung

  • C ++ Primer * (Stanley Lippman, Josée Lajoie und Barbara E. Moo) ( aktualisiert für C ++ 11 ) Auf 1k Seiten ist dies eine sehr gründliche Einführung in C ++, die nahezu alles in der Sprache in einem sehr zugänglichen Format abdeckt und sehr detailliert. Die fünfte Ausgabe (veröffentlicht am 16. August 2012) behandelt C ++ 11. [Rezension]

  • Programmierung: Prinzipien und Praxis mit C ++ (Bjarne Stroustrup, 2. Ausgabe - 25. Mai 2014) ( aktualisiert für C ++ 11 / C ++ 14 ) Eine Einführung in die Programmierung mit C ++ durch den Ersteller der Sprache. Eine gute Lektüre, die keine Programmiererfahrung voraussetzt, aber nicht nur für Anfänger ist.

* Nicht zu verwechseln mit C ++ Primer Plus (Stephen Prata) mit einer deutlich ungünstigeren Bewertung .

Einführung mit Programmiererfahrung

  • Eine Tour durch C ++ (Bjarne Stroustrup) ( 2. Ausgabe für C ++ 17 ) Die „Tour“ ist eine kurze (ca. 180 Seiten und 14 Kapitel) Tutorial-Übersicht über alle Standard-C ++ (Sprache und Standardbibliothek sowie unter Verwendung von C ++) 11 ) auf einem mäßig hohen 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 der 4. Ausgabe der C ++ - Programmiersprache enthält.

  • Beschleunigtes C ++ (Andrew Koenig und Barbara Moo, 1. Ausgabe - 24. August 2000) Dies deckt im Wesentlichen den gleichen Bereich ab wie der C ++ - Primer , jedoch auf einem Viertel seines Platzes. Dies liegt hauptsächlich daran, dass es sich nicht um eine Einführung in die Programmierung handelt , sondern um eine Einführung in C ++ für Personen, 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, indem es als erstes Anfängerbuch einen modernen Ansatz für den Sprachunterricht verwendet hat.) Trotzdem ist das C ++, das es lehrt, rein C ++ 98. [Rezension]

Empfohlene Vorgehensweise

  • Effektives C ++ (Scott Meyers, 3. Ausgabe - 22. Mai 2005) Dies wurde mit dem Ziel geschrieben, das beste zweite Buch zu sein, das C ++ - Programmierer lesen sollten, und es gelang. Frühere Ausgaben richteten sich an Programmierer aus C, die dritte Ausgabe ändert dies und richtet sich an Programmierer aus Sprachen wie Java. Es präsentiert ~ 50 leicht zu merkende Faustregeln zusammen mit ihrer Begründung in einem sehr zugänglichen (und unterhaltsamen) Stil. Für C ++ 11 und C ++ 14 sind die Beispiele und einige Probleme veraltet, und Effective Modern C ++ sollte bevorzugt werden. [Rezension]

  • Effective Modern C ++ (Scott Meyers) Dies ist im Grunde die neue Version von Effective C ++ , die sich an C ++ - Programmierer richtet, die den Übergang von C ++ 03 zu C ++ 11 und C ++ 14 vornehmen.

  • Effektive STL (Scott Meyers) Dies zielt darauf ab, dasselbe mit dem Teil der Standardbibliothek zu tun, der aus der STL stammt, was Effective C ++ mit der gesamten Sprache gemacht hat: Es enthält Faustregeln sowie deren Begründung. [Rezension]

Mittlere

  • Effektiveres C ++ (Scott Meyers) Noch mehr Faustregeln als effektives C ++ . Nicht so wichtig wie im ersten Buch, aber trotzdem gut zu wissen.

  • Außergewöhnliches C ++ (Herb Sutter) Als eine Reihe von Rätseln präsentiert, bietet dies eine der besten und gründlichsten Diskussionen über das richtige Ressourcenmanagement und die Ausnahmesicherheit in C ++ durch Resource Acquisition is Initialization (RAII) sowie eine ausführliche Beschreibung einer Vielzahl von anderen Themen, einschließlich der Pimpl-Sprache, der Namenssuche, des guten Klassendesigns und des C ++ - Speichermodells. [Rezension]

  • Mehr Außergewöhnliches C ++ (Herb Sutter) Behandelt zusätzliche Ausnahmesicherheitsthemen, die in Außergewöhnlichem C ++ nicht behandelt werden, sowie die Erörterung einer effektiven objektorientierten Programmierung in C ++ und die korrekte Verwendung der STL. [Rezension]

  • Außergewöhnlicher C ++ - Stil (Herb Sutter) Erläutert die allgemeine Programmierung, Optimierung und Ressourcenverwaltung. Dieses Buch enthält auch eine hervorragende Beschreibung des Schreibens von modularem Code in C ++ unter Verwendung von Funktionen, die keine Mitglieder sind, und des Prinzips der Einzelverantwortung. [Rezension]

  • C ++ - Codierungsstandards (Herb Sutter und Andrei Alexandrescu) „Codierungsstandards“ bedeuten hier nicht „wie viele Leerzeichen soll ich meinen Code einrücken?“. Dieses Buch enthält 101 Best Practices, Redewendungen und allgemeine Fallstricke, mit denen Sie korrekten, verständlichen und effizienten C ++ - Code schreiben können. [Rezension]

  • C ++ - Vorlagen: Der vollständige Leitfaden (David Vandevoorde und Nicolai M. Josuttis) Dies ist das Buch über Vorlagen, wie sie vor C ++ 11 existierten. Es behandelt alles von den Grundlagen bis zu einigen der fortschrittlichsten Metaprogrammierungen für Vorlagen und erklärt jedes Detail der Funktionsweise von Vorlagen (sowohl konzeptionell als auch bei ihrer Implementierung) und erörtert viele häufig auftretende Fallstricke. Enthält hervorragende Zusammenfassungen der One Definition Rule (ODR) und der Überlastungsauflösung in den Anhängen. Eine zweite Ausgabe zu C ++ 11, C ++ 14 und C ++ 17 wurde bereits veröffentlicht. [Rezension]

  • C ++ 17 - Das vollständige Handbuch (Nicolai M. Josuttis) Dieses Buch beschreibt alle neuen Funktionen, die im C ++ 17-Standard eingeführt wurden, von einfachen Funktionen wie "Inline-Variablen", "constexpr if" bis hin zu "Polymorphic" Speicherressourcen 'und' Neu und Löschen mit überausgerichteten Daten '.


Erweitert

  • Modernes C ++ - Design (Andrei Alexandrescu) Ein bahnbrechendes Buch über fortgeschrittene generische Programmiertechniken. Einführung in richtlinienbasiertes Design, Typlisten und grundlegende generische Programmiersprachen. Anschließend wird erläutert, wie viele nützliche Designmuster (einschließlich kleiner Objektzuweiser, Funktoren, Fabriken, Besucher und Multi-Methoden) mithilfe generischer Programmierung effizient, modular und sauber implementiert werden können . [Rezension]

  • Metaprogrammierung von C ++ - Vorlagen (David Abrahams und Aleksey Gurtovoy)

  • C ++ - Parallelität in Aktion (Anthony Williams) Ein Buch über die Unterstützung der C ++ 11-Parallelität, einschließlich der Thread-Bibliothek, der Atomics-Bibliothek, des C ++ - Speichermodells, Sperren und Mutexen sowie Fragen zum Entwerfen und Debuggen von Multithread-Anwendungen. Eine zweite Ausgabe zu C ++ 14 und C ++ 17 wurde bereits veröffentlicht.

  • Fortgeschrittene C ++ - Metaprogrammierung (Davide Di Gennaro) Ein Handbuch für TMP-Techniken vor C ++ 11, das sich mehr auf die Praxis als auf die Theorie konzentriert. Es gibt eine Menge Ausschnitte in diesem Buch, von denen einige durch Typmerkmale veraltet sind, aber die Techniken sind dennoch nützlich zu wissen. Wenn Sie sich mit der skurrilen Formatierung / Bearbeitung abfinden können, ist es einfacher zu lesen als Alexandrescu und wohl lohnender. Für erfahrene Entwickler besteht eine gute Chance, dass Sie etwas über eine dunkle Ecke von C ++ (eine Eigenart) herausfinden, die normalerweise nur durch umfangreiche Erfahrung zustande kommt.

  • Funktionale Programmierung in C ++ (Ivan Čukić) Das Buch führt den Leser in das funktionale Paradigma in modernem C ++ ein. Es behandelt die theoretischen und Code-Aspekte mit einer Vielzahl von Beispielen und Diagrammen. Der Autor hat Erfahrung im Unterrichten und führt den Leser reibungslos durch verschiedene Aspekte der funktionalen Programmierung.


Referenzstil - Alle Ebenen

  • Die C ++ - Programmiersprache (Bjarne Stroustrup) ( aktualisiert für C ++ 11 ) Die klassische Einführung in C ++ durch den Ersteller. Parallel zum klassischen K & R geschrieben, liest sich dies in der Tat sehr ähnlich und deckt fast alles ab, von der Kernsprache über die Standardbibliothek bis hin zu Programmierparadigmen und der Sprachphilosophie. [Review] Hinweis: Alle Versionen des C ++ Standard sind in dieser Frage verfolgt: Wo ich den aktuellen C ++ Standard finden Sie .

  • C ++ Standard Library Einführung und Referenz (Nicolai Josuttis) ( aktualisiert für C ++ 11 ) Die Einführung und Referenz für den C ++ Standard Library. Die zweite Ausgabe (veröffentlicht am 9. April 2012) behandelt C ++ 11. [Rezension]

  • Die C ++ - E / A-Streams und Gebietsschemas (Angelika Langer und Klaus Kreft) Zu diesem Buch gibt es nur sehr wenig zu sagen, außer wenn Sie etwas über Streams und Gebietsschemas wissen möchten, ist dies der einzige Ort, an dem Sie endgültige Antworten finden. [Rezension]

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

  • Das C ++ 11 / 14 / 17 Standard (INCITS / ISO / IEC 14882: 2011/2014/2017) Das ist natürlich, ist die letzte Instanz von allem , was ist oder nicht C ++. Beachten Sie jedoch, dass es nur als Referenz für erfahrene Benutzer gedacht ist, die bereit sind, viel Zeit und Mühe in das Verständnis zu investieren. Der C ++ 17-Standard wird in elektronischer Form für 198 Schweizer Franken veröffentlicht.

  • Der C ++ 17-Standard ist verfügbar, aber scheinbar nicht in wirtschaftlicher Form - direkt von der ISO kostet er 198 Schweizer Franken (ca. 200 US-Dollar). Für die meisten Menschen ist der endgültige Entwurf vor der Normung mehr als ausreichend (und kostenlos). Viele werden einen noch neueren Entwurf bevorzugen , der neue Funktionen dokumentiert, die wahrscheinlich in C ++ 20 enthalten sind.

  • Überblick über das neue C ++ (C ++ 11/14) (nur PDF) (Scott Meyers) ( aktualisiert für C ++ 14 ) Dies sind die Präsentationsmaterialien (Folien und einige Vorlesungsunterlagen) eines dreitägigen Schulungskurses von Scott Meyers, ein hoch angesehener Autor von C ++. Obwohl die Liste der Artikel kurz ist, ist die Qualität hoch.

  • Das C ++ - Kernrichtlinien (C ++ 11/14/17 /…) (herausgegeben von Bjarne Stroustrup und Herb Sutter) sind ein sich weiterentwickelndes Online-Dokument, das aus einer Reihe von Richtlinien für die Verwendung moderner C ++ - Brunnen besteht. Die Richtlinien konzentrieren sich auf relativ übergeordnete Themen wie Schnittstellen, Ressourcenverwaltung, Speicherverwaltung und Parallelität, die sich auf die Anwendungsarchitektur und das Bibliotheksdesign auswirken. Das Projekt wurde auf der CppCon'15 von Bjarne Stroustrup und anderen angekündigt und begrüßt Beiträge der Community. Die meisten Richtlinien werden durch eine Begründung und Beispiele sowie Diskussionen über mögliche Toolunterstützung ergänzt. Viele Regeln sind speziell so konzipiert, dass sie von statischen Analysewerkzeugen automatisch überprüft werden können.

  • Das C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup und andere) ist ein Versuch der Standard C ++ Foundation, die zuvor von Marshall Cline und Bjarne Stroustrup individuell gepflegten C ++ - FAQs zu vereinheitlichen und auch neue Beiträge einzubeziehen. Die Artikel befassen sich hauptsächlich mit Problemen auf mittlerer Ebene und sind oft mit einem humorvollen Ton geschrieben. Möglicherweise sind noch nicht alle Elemente mit der neuesten Ausgabe des C ++ - Standards auf dem neuesten Stand.

  • cppreference.com (C ++ 03/11/14/17 /…) (initiiert von Nate Kohl) ist ein Wiki, das die grundlegenden Funktionen der Kernsprache zusammenfasst und eine umfassende Dokumentation der C ++ - Standardbibliothek enthält. Die Dokumentation ist sehr präzise, ​​aber leichter zu lesen als das offizielle Standarddokument und bietet aufgrund ihres Wiki-Charakters eine bessere Navigation. Das Projekt dokumentiert alle Versionen des C ++ - Standards und die Site ermöglicht das Filtern der Anzeige nach einer bestimmten Version. Das Projekt war von Nate Kohl auf der CppCon'14 vorgestellt .


Klassiker / Ältere

Hinweis: Einige in diesen Büchern enthaltene Informationen sind möglicherweise nicht aktuell oder werden nicht mehr als Best Practice angesehen.

  • Das Design und die Entwicklung von C ++ (Bjarne Stroustrup) Wenn Sie wissen möchten, warum die Sprache so ist, wie sie ist, finden Sie in diesem Buch Antworten. Dies umfasst alles vor der Standardisierung von C ++.

  • Überlegungen zu C ++ - (Andrew Koenig und Barbara Moo) [Review]

  • Fortgeschrittene C ++ - Programmierstile und Redewendungen (James Coplien) Als Vorgänger der Musterbewegung werden viele C ++ - spezifische „Redewendungen“ beschrieben. Es ist sicherlich ein sehr gutes Buch und möglicherweise immer noch eine Lektüre wert, wenn Sie Zeit sparen können, aber ziemlich alt und mit dem aktuellen C ++ nicht auf dem neuesten Stand.

  • Großformatiges C ++ - Softwaredesign (John Lakos) Lakos erklärt Techniken zum Verwalten sehr großer C ++ - Softwareprojekte. Sicher eine gute Lektüre, wenn sie nur aktuell wäre. Es wurde lange vor C ++ 98 geschrieben und enthält viele Funktionen (z. B. Namespaces), die für Großprojekte wichtig sind. Wenn Sie in einem großen C ++ - Softwareprojekt arbeiten müssen, möchten Sie es vielleicht lesen, obwohl Sie mehr als ein Körnchen Salz mitnehmen müssen. Der erste Band einer neuen Ausgabe erscheint 2019 .

  • Innerhalb des C ++ - Objektmodells (Stanley Lippman) Wenn Sie wissen möchten, wie Funktionen für virtuelle Elemente häufig implementiert werden und wie Basisobjekte in einem Szenario mit mehreren Vererbungen häufig im Speicher angeordnet sind und wie sich all dies auf die Leistung auswirkt, werden Sie dies tun gründliche Diskussionen über solche Themen finden.

  • Das kommentierte C ++ - Referenzhandbuch (Bjarne Stroustrup, Margaret A. Ellis) Dieses Buch ist ziemlich veraltet, da es die C ++ 2.0-Version von 1989 untersucht - Vorlagen, Ausnahmen, Namespaces und neue Casts wurden noch nicht eingeführt. In diesem Buch wird jedoch der gesamte C ++ - Standard der Zeit durchlaufen und die Gründe, mögliche Implementierungen und Funktionen der Sprache erläutert. Dies ist kein Buch, um Programmierprinzipien und -muster in C ++ zu lernen, sondern um jeden Aspekt der C ++ - Sprache zu verstehen.

  • Denken in C ++ (Bruce Eckel, 2. Auflage, 2000). Zwei Bände; ist ein kostenloser Satz von Büchern im Intro-Level imTutorial-Stil. Downloads: Band 1 , Band 2 . Leider sind sie durch eine Reihe trivialer Fehler (z. B. die automatische Beibehaltung von Provisorienconst) ohne offizielle Errata-Listebeeinträchtigt. Eine Teil 3 rd Party errata Liste ist unter (erhältlich http://www.computersciencelab.com/Eckel.htm ), aber es ist offensichtlich nicht aufrechterhalten.

  • Wissenschaft und Technik C ++: Eine Einführung in fortgeschrittene Techniken und Beispiele (John Barton und Lee Nackman) Es ist ein umfassendes und sehr detailliertes Buch, das versucht hat, alle in C ++ verfügbaren Funktionen im Kontext numerischer Methoden zu erklären und zu nutzen. Zu dieser Zeit wurden verschiedene neue Techniken eingeführt, wie beispielsweise das Curiously Recurring Template Pattern (CRTP, auch Barton-Nackman-Trick genannt). Es war Vorreiter bei verschiedenen Techniken wie der Dimensionsanalyse und der automatischen Differenzierung. Es enthielt eine Menge kompilierbaren und nützlichen Codes, der von einem Ausdrucksparser bis zu einem Lapack-Wrapper reichte. Der Code ist weiterhin 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 Stil und C ++ - Funktionen etwas veraltet, aber es war zu dieser Zeit eine unglaubliche Tour de Force (1994, vor STL). Die Kapitel über die dynamische Vererbung sind etwas kompliziert zu verstehen und nicht sehr nützlich. Eine aktualisierte Version dieses klassischen Buches, die die Bewegungssemantik und die Lehren aus der STL enthält, wäre sehr schön.

George Stocker
quelle
402
@G Rassovsky: Alle Bücher, die versprechen, X in Y Stunden zu unterrichten. Zum Beispiel lernen Sie C ++ in 24 Stunden. Ich glaube, all solche Bücher sollten besser vermieden werden.
akhil_mittal
115
Ich hasse es, jemandem auf die Schuhe zu treten, aber ich empfehle Bruce Eckels "Thinking in C ++" nicht, obwohl ich den Autor dafür respektiere, dass er seine Materialien kostenlos online veröffentlicht. Die Perspektive des Buches deutet auf eine relativ schlechte oder ineffektive Verwendung von C ++ und "objektorientierter" Programmierung hin, ähnlich einer schlechten Anwendung der GoF-Entwurfsmuster. Ich fand es ein interessantes Einführungsbuch in das Programmieren im Allgemeinen, aber wenn jemand mehr mit dem Programmieren und (insbesondere) der Informatik als Ganzes vertraut wird, finde ich Bücher, die rein in "klassischen" OOP-Begriffen denken, die sich nachteilig auf die Bildung auswirken.
30
@ G.Rassovsky auf der Website accu.org gibt es einen Buchbesprechungsbereich mit Bewertungen. Sie können nach den C ++ suchen. Viele von ihnen werden mit "nicht empfohlen" bewertet.
Zaphod Beeblebrox
83
Accelerated C ++ stammt aus dem Jahr 2000. Sollte ich mir Sorgen machen, dass es veraltet ist?
AutonomousApps
60
Ich denke, es wäre gut, die für die Ausgabe veröffentlichten Daten anzugeben (gegebenenfalls mit der Editionsnummer).
Aaron Hall