web-dev-qa-db-de.com

Die definitive C ++ - Buchanleitung und -liste

Diese Frage versucht, die wenigen Perlen unter den Dutzenden schlechter C++ - Bücher zu sammeln, die jedes Jahr veröffentlicht werden.

Im Gegensatz zu vielen anderen Programmiersprachen, die häufig von unterwegs aus dem Internet heruntergeladen werden, sind nur wenige in der Lage, C++ schnell zu erlernen, ohne ein gut geschriebenes C++ - Buch zu lesen. Dafür ist es viel zu groß und zu komplex. Tatsächlich ist es so groß und komplex, dass es sehr viele sehr schlechte C++ - Bücher gibt da draußen. Und wir sprechen nicht von schlechtem Stil, sondern von Dingen wie dem Sport mit auffällig offensichtlichen sachlichen Fehlern und der Förderung von abscheulich schlechten Programmierstilen .

Bearbeiten Sie die akzeptierte Antwort, um Qualitätsbücher und einen ungefähren Kenntnisstand anzugeben - , vorzugsweise nach Besprechen Sie Ihre Hinzufügung in dem C++ - Chatraum. (Die Stammgäste können Ihre Arbeit gnadenlos rückgängig machen, wenn sie mit einer Empfehlung nicht einverstanden sind.) Fügen Sie eine kurze Beschreibung zu jedem Buch hinzu, das Sie persönlich gelesen haben bzw. 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) haben Links zur Rezension.

* Hinweis: FAQs und andere Ressourcen finden Sie in C++ - Tag-Info und unter C++ - FAQ .

4248
grepsedawk

Anfänger

Einführungskurs, keine Programmiererfahrung

  • C++ Primer * (Stanley Lippman, Josée Lajoie und Barbara E. Moo) ( aktualisiert für C++ 11 ) Mit einer Länge von 1 KB ist dies eine sehr gründliche Einführung in C++, die fast alles in der Sprache in einem sehr zugänglichen Format und sehr detailliert behandelt. Die fünfte Ausgabe (veröffentlicht am 16. August 2012) befasst sich mit C++ 11. [Review]

  • Programmierung: Grundlagen und Übung mit C++ (Bjarne Stroustrup, 2. Auflage - 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, sondern nicht nur für Anfänger ist.

* Nicht zu verwechseln mit C++ Primer Plus (Stephen Prata), mit einem deutlich ungünstigeren Review .

Einführungskurs mit Vorkenntnissen in der Programmierung

  • Eine Tour durch C++ (Bjarne Stroustrup) (2. Auflage für C++ 17) Die "Tour" ist eine kurze Übersicht (ca. 180 Seiten und 14 Kapitel) über alle 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 aus den Kapiteln 2-5 der C++ - Programmiersprache, 4. Auflage.

  • Accelerated C++ (Andrew Koenig und Barbara Moo, 1. Auflage - 24. August 2000) Grundsätzlich gilt das Gleiche wie für den C++ Primer, tut dies aber auf einem Viertel seines Platzes. Dies liegt hauptsächlich daran, dass nicht versucht wird, eine Einführung in Programmierung zu geben, sondern 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 als erstes Anfängerbuch neue Wege beschritten, um die Sprache auf moderne Weise zu unterrichten.) Trotzdem ist das unterrichtete C++ nur C++ 98. [Review]

Empfohlene Vorgehensweise

  • Effective C++ (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 es gelang ihnen . Frühere Ausgaben richteten sich an Programmierer aus C, die dritte Ausgabe ändert dies und richtet sich an Programmierer aus Sprachen wie Java. Es enthält ca. 50 leicht zu merkende Faustregeln sowie deren Begründung in einem leicht 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. [Review]

  • 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 bis C++ 11 und C++ 14.

  • Effektive STL (Scott Meyers) Dies zielt darauf ab, dasselbe mit dem Teil der Standardbibliothek zu tun, der aus der STL stammt, was Effektive C++ = hat mit der Sprache insgesamt zu tun: Sie enthält Faustregeln und deren Begründung. [Review]

Mittlere

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

  • Exceptional C++ (Herb Sutter) Als Puzzlespiel präsentiert, bietet dies eine der besten und gründlichsten Diskussionen über die ordnungsgemäße Ressourcenverwaltung und Ausnahmesicherheit in C++ über Resource Acquisition is Initialization (RAII) behandelt eine Reihe weiterer Themen, darunter die Pimpl-Sprache, die Namenssuche, das gute Klassendesign und das C++ - Speichermodell. [Review]

  • Außergewöhnlicheres C++ (Herb Sutter) Deckt zusätzliche Sicherheitsaspekte für Ausnahmen ab, die nicht in Außergewöhnliches C++ behandelt werden, zusätzlich zur Erläuterung des effektiven Objekts Programmierung in C++ und korrekte Verwendung der AWL. [Review]

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

  • 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 Best Practices, Redewendungen und häufige Fallstricke, mit denen Sie korrekten, verständlichen und effizienten C++ - Code schreiben können. [Review]

  • C++ Templates: The Complete Guide (David Vandevoorde und Nicolai M. Josuttis) Dies ist das ein Buch über Vorlagen, wie sie vorher existierten C++ 11. Es deckt alles ab, von den Grundlagen bis zu einigen der fortschrittlichsten Vorlagen-Metaprogrammierungen, und es erklärt jedes Detail der Funktionsweise von Vorlagen (sowohl konzeptionell als auch bei der Implementierung) und erörtert viele häufige Fallstricke. Verfügt über hervorragende Zusammenfassungen der One Definition Rule (ODR) und der Überladungsauflösung in den Anhängen. Eine zweite Ausgabe für C++ 11, C++ 14 und C++ 17 wurde bereits veröffentlicht. [Review]

  • C++ 17 - The Complete Guide (Nicolai M. Josuttis) In diesem Buch werden alle neuen Funktionen des C++ 17-Standards beschrieben, von einfachen bis hin zu einfachen 'Inline-Variablen', 'constexpr if' bis zu 'Polymorphic Memory Resources' und 'New and Delete with overaligned Data'.


Fortgeschritten

  • Modernes C++ Design (Andrei Alexandrescu) Ein bahnbrechendes Buch über fortgeschrittene generische Programmiertechniken. Einführung in richtlinienbasiertes Design, Typenlisten und grundlegende generische Programmiersprachen. Anschließend wird erläutert, wie viele nützliche Entwurfsmuster (einschließlich kleiner Objektzuordnungen, Funktoren, Fabriken, Besucher und Multimethoden) mithilfe der generischen Programmierung effizient, modular und sauber implementiert werden können . [Review]

  • C++ Template Metaprogramming (David Abrahams und Aleksey Gurtovoy)

  • C++ Concurrency In Action (Anthony Williams) Ein Buch über die Unterstützung von C++ 11 Concurrency einschließlich der Thread-Bibliothek, der Atomics-Bibliothek, des C++ - Speichermodells, der Sperren und der Mutexe sowie Probleme beim Entwerfen und Debuggen von Multithread-Anwendungen.

  • Advanced C++ Metaprogramming (Davide Di Gennaro) Ein Handbuch zu TMP-Techniken vor C++ 11, das sich mehr auf die Praxis als auf die Theorie konzentriert. Es gibt eine Menge Schnipsel in diesem Buch, von denen einige durch Typmerkmale veraltet sind, aber die Techniken sind dennoch nützlich, um sie zu kennen. Wenn Sie sich mit der schrulligen Formatierung/Bearbeitung abfinden, ist es leichter zu lesen als Alexandrescu und wahrscheinlich lohnender. Für erfahrene Entwickler gibt es eine gute Chance, dass Sie etwas über eine dunkle Ecke von C++ (eine Eigenart) herausfinden, die normalerweise nur durch umfangreiche Erfahrung zustande kommt.


Referenzstil - Alle Ebenen

  • Die C++ - Programmiersprache (Bjarne Stroustrup) ( aktualisiert für C++ 11 ) Die klassische Einführung in C++ von seinem Schöpfer. Parallel zum klassischen K & R geschrieben, liest es sich in der Tat sehr ähnlich und deckt nahezu alles ab, von der Kernsprache über die Standardbibliothek bis hin zu Programmierparadigmen für die Sprachphilosophie. [Review] Hinweis: Alle Releases des C++ - Standards werden in dieser Frage nachverfolgt: Wo finde ich den aktuellen C++ - Standard? .

  • C++ Standard Library Tutorial und Referenz (Nicolai Josuttis) ( aktualisiert für C++ 11 ) The Einführung und Referenz für die C++ Standard Library. Die zweite Ausgabe (veröffentlicht am 9. April 2012) befasst sich mit C++ 11. [Review]

  • The C++ IO Streams and Locales (Angelika Langer und Klaus Kreft) Zu diesem Buch gibt es nur wenig zu sagen, wenn Wenn Sie etwas über Streams und Gebietsschemas wissen möchten, finden Sie hier die endgültigen Antworten. [Review]

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

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

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

  • Übersicht ü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 Trainingskurses, der von Scott Meyers, einem hoch angesehenen Autor von C++, angeboten wird. Obwohl die Liste der Artikel kurz ist, ist die Qualität hoch.

  • Das C++ Core Guidelines (C++ 11/14/17 /…) (herausgegeben von Bjarne Stroustrup und Herb Sutter) ist ein sich entwickelndes Online-Dokument, das aus einem Set besteht von Richtlinien für die Verwendung von modernen C++ gut. 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 war angekündigt auf der CppCon'15 von Bjarne Stroustrup und anderen 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 so konzipiert, dass sie von statischen Analysewerkzeugen automatisch überprüft werden können.

  • Die C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup und andere) ist ein Versuch der Standard C++ Foundation, die C++ FAQs zu vereinheitlichen, die bisher von Marshall Cline und Marshall Cline individuell gepflegt wurden Bjarne Stroustrup und auch die Aufnahme neuer Beiträge. Die Artikel befassen sich meistens mit Problemen auf mittlerer Ebene und sind oft in einem humorvollen Ton geschrieben. Möglicherweise sind noch nicht alle Elemente mit der neuesten Version des C++ - Standards vollständig 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 verfügt über eine umfangreiche Dokumentation der C++ - Standardbibliothek. Die Dokumentation ist sehr präzise, ​​aber einfacher zu lesen als das offizielle Standarddokument und bietet aufgrund des 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 vorgestellt von Nate Kohl auf der CppCon'14 .


Klassiker/Ältere

Hinweis: Einige in diesen Büchern enthaltene Informationen sind möglicherweise nicht aktuell oder werden nicht mehr als bewährte Verfahren angesehen.

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

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

  • Fortgeschrittene C++ - Programmierstile und - Redewendungen (James Coplien) Als Vorläufer der Musterbewegung beschreibt es viele C++ - spezifische "Redewendungen". Es ist auf jeden Fall ein sehr gutes Buch und ist vielleicht noch eine Lektüre wert, wenn Sie Zeit haben, aber ziemlich alt und nicht auf dem neuesten Stand von C++.

  • C++ - Softwareentwurf in großem Maßstab (John Lakos) Lakos erklärt Techniken zum Verwalten sehr großer C++ - Softwareprojekte. Sicherlich eine gute Lektüre, wenn es nur aktuell war. 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 möglicherweise lesen, obwohl Sie mehr als ein Körnchen Salz mit sich führen müssen. Der erste Band einer neuen Ausgabe ist voraussichtlich 2019 .

  • Innerhalb des C++ - Objektmodells (Stanley Lippman) Wenn Sie wissen möchten, wie virtuelle Elementfunktionen häufig implementiert werden und wie Basisobjekte häufig in einem Multi im Speicher angeordnet sind In diesem Vererbungsszenario und wie sich dies auf die Leistung auswirkt, finden Sie ausführliche Diskussionen zu diesen Themen.

  • The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) Dieses Buch ist veraltet, da es die 1989 C++ 2.0-Version untersucht - Vorlagen, Ausnahmen , Namespaces und neue Casts wurden noch nicht eingeführt. In diesem Buch wird jedoch der gesamte C++ - Standard der damaligen Zeit durchlaufen, wobei die Gründe, die möglichen Implementierungen und die Merkmale der Sprache erläutert werden. Dies ist kein Buch zum Erlernen von Programmierprinzipien und -mustern in C++, sondern zum Verstehen aller Aspekte der C++ - Sprache.

  • Denken in C++ (Bruce Eckel, 2. Auflage, 2000). Zwei Bände; ist ein Tutorial-Stil kostenlos Satz von Büchern für Anfänger. Downloads: Band 1 , Band 2 . Leider sind sie mit einer Reihe von geringfügigen Fehlern behaftet (z. B. der Behauptung, dass Provisorien automatisch const sind), ohne dass eine offizielle Errata-Liste vorliegt. Ein teilweiser 3rd Die Liste der Party-Errata finden Sie unter ( http://www.computersciencelab.com/Eckel.htm ), sie wird jedoch anscheinend nicht gepflegt.

  • Scientific and Engineering 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, zu erklären und zu nutzen aller in C++ verfügbaren Funktionen im Kontext numerischer Methoden. Es führte zu der Zeit 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 enthielt eine Menge kompilierbaren und nützlichen Codes, von einem Ausdrucksparser bis zu einem Lapack-Wrapper. Der Code ist hier noch verfügbar: http://www.informit.com/store/wissenschaftliches-und-ingenieurwesen-c-plus-plus-und-einführung-9780201533934 . Leider sind die Bücher im Stil und in den C++ - Funktionen etwas veraltet, aber es war zu dieser Zeit eine unglaubliche Tour-de-Force (1994, vor STL). Die Kapitel zur Dynamikvererbung sind etwas kompliziert zu verstehen und wenig hilfreich. Eine aktualisierte Version dieses klassischen Buches, das die Bewegungssemantik und die Lehren aus der STL enthält, wäre sehr schön.

4551