Kochbuch-Rezension zur modernen C++-Programmierung

Kochbuch-Rezension zur modernen C++-Programmierung

Im Mai 2017 haben wir ein weiteres Buch über Modern C++ bekommen! Vor ein paar Wochen habe ich ein Exemplar von Packt Publishing bekommen, und heute möchte ich ein paar Worte zu dem Buch schreiben. Kurz gesagt:Es ist ein sehr gutes Buch! :)

Aber mal sehen, was drin ist…

Das Buch

von Marius Bancila

Über Marius:sein Blog @mariusbancila

Sein Post über die Veröffentlichung des Buches

Quellcode verfügbar auf PackPubsite

Die Struktur

Es gibt 11 Kapitel, rund 550 Seiten und über 100 Rezepte!

1. Erlernen der Funktionen moderner Kernsprachen

Verwenden Sie auto, Typaliase, einheitliche Initialisierung, bereichsbezogene Enumerationen und gleichmäßig strukturierte Bindungen (C++17)

2. Mit Zahlen und Zeichenketten arbeiten

Durchführen von Konvertierungen, Umgang mit numerischen Typen, benutzerdefinierten Literalen, string_view (C++17)

3. Funktionen erkunden

Gelöschte Funktionen, Lambdas, Map und Folds, Funktionen höherer Ordnung, funktionale Programmierung

4. Präprozessor und Kompilierung

Bedingte Kompilierung, Präprozessor-Hacks, enable_if (SFINAE),constexpr if (C++17), Attribute.

5. Container, Algorithmen und Iteratoren der Standardbibliothek

Mit vector , Bitset, Algorithmen, Suchen, Schreiben eines benutzerdefinierten Iterators

6. Allzweck-Dienstprogramme

Zeitintervalle, Zeitmessung, Hashing, std::any , std::optional ,std::variant (alle von C++17), Besucher, Typeigenschaften.

7. Arbeiten mit Dateien und Streams

Lesen und Schreiben von/in Dateien, Serialisierung von Objekten, Dateisystem (C++17)

8. Nutzung von Threading und Parallelität

Threads, Sperren, asynchroner Aufruf, Implementieren von parallelem Map and Fold, Tasks, Atomic.

9. Robustheit und Leistung

Ausnahmen, noexcept , Konstante Ausdrücke, Smart Pointer, Bewegungssemantik.

10. Implementieren von Mustern und Redewendungen

Verbesserung von Fabrikmustern (durch Vermeidung von if…else-Anweisungen), Pimplidiom, Named-Parameter-Idiom, NVI, Attorney-Client-Idiom, Thread-Safesingleton.

11. Erkunden von Test-Frameworks

Schreiben von Tests in Boost.Test, Google Test, Catch

Meine Ansicht

Wie Sie mit dem Buch sehen können, erhalten wir viele nützliche Rezepte. Was mir von Anfang an gefällt, ist, dass es Themen aus C++11, C++14 und sogar C++17 gibt. Damit ist das Buch auf dem neuesten Stand (sogar weiter als der aktuelle C++-Stand!). Der Autor erklärt deutlich, was sich zwischen den C++-Versionen geändert hat. Ich weiß, wie schwer es ist, all diese kleinen Nuancen in den Standardversionen herauszufiltern, also ist es ein solider Vorteil des Buches.

Ein paar Rezepte, die meine Aufmerksamkeit erregt haben:

  • Bereichsbasierte for-Schleifen für benutzerdefinierte Typen aktivieren - sehr praktisch, wenn Sie mit nicht standardmäßigen Bibliothekscontainern arbeiten.
  • Gekochte benutzerdefinierte Literale erstellen
  • Verwendung von string_view anstelle von konstanten String-Referenzen
  • Fold-Ausdrücke verwenden, um variadische Funktionsvorlagen zu vereinfachen.“
  • Kapitel über funktionale Programmierung
  • Bereitstellung von Metadaten für den Compiler mit Attributen
  • Serialisierung
  • Funktionen der C++17-Bibliothek:any , variant , optional und auch Dateisystem.
  • Muster wie Anwalt-Klienten-Idiom.
  • Chronik

Zum Beispiel mit chrono Ich habe einen schönen Code gefunden, schau mal:

using namespace std::chrono_literals;
auto d1 = 1h + 23min + 45s; // d1 = 5025s
auto d2 = 3h + 12min + 50s; // d2 = 11570s
if (d1 < d2) { /* do something */ }

Ist das nicht sauber und ausdrucksstark? Der Code ist dank chrono_literals möglich (verfügbar seit C++14) und User DefinedLiterals(C++11).

Der Kochbuchstil eignet sich gut für „modernes“ Lernen, wenn Sie schnell ein Thema auswählen und lesen möchten – ohne von Anfang bis Ende lesen zu müssen. Hier können Sie je nach Kenntnisstand und Erfahrung das ganze Buch lesen oder einfach mehrere Rezepte auswählen. Ich mag solch einen Ansatz. Ich bin ein Fan von Kochbüchern, da ich einige davon bereits rezensiert habe (wie hier, hier und hier)

Mit diesem Buch bekommen wir viel „Fleisch“ ins Innere. Es gibt keine theoretischen/aufgeblähten Kapitel, Geschwätz oder ähnliches … Sie haben ein umsetzbares Rezept erhalten, das Sie in Ihrem Code verwenden können, experimentieren Sie. Natürlich sind Rezepte oft miteinander verbunden - insbesondere in einem Kapitel reichen sie von den einfachsten bis zu fortgeschrittenen Bereichen.

Ich glaube, es war auch ziemlich schwierig zu entscheiden, was in das Buch aufgenommen werden sollte. Theoretisch würde es etwa 2000… oder 3000 Seiten dauern, „alle“ Rezepte für C++ zu haben. Dennoch denke ich, dass das Buch gut organisiert ist und Sie die meisten nützlichen Dinge aus modernem C++ bekommen. Natürlich würde ich gerne mehr verlangen :)

Die Auswahl der Themen versucht alle Bedürfnisse abzudecken. Wenn Sie einige spezifische/fortgeschrittene Teile benötigen, können Sie andere Bücher wie EffectiveModern C++, C++ Concurrency inAction, Discovering ModernC++.

aufgreifen

Zusammenfassung

Endnote:4,5/5

Vorteile:

  • Klare Struktur
  • Kochbuchstil, also lesen Sie, was Sie brauchen
  • Kapitel beginnen normalerweise mit einigen Grundrezepten und steigern dann die Komplexität.
  • Prägnante Beispiele und Details, wie es funktioniert, also nicht nur Funktionsüberschriften.
  • Moderner Codierungsstandard, sogar mit C++17-Sachen!
  • C++11, C++14 und C++17 – mit klarer Unterscheidung, Erklärung der Änderungen usw.
  • Es hat nicht viel „Einführung in C++“, also können Sie einfach in fortgeschrittene Themen springen! Es ist kein weiteres einfaches Anfängerbuch.
  • Hier und da gibt es nützliche „Tipps“

Nachteile:

  • Ein paar Tippfehler, Wiederholungen, eine fehlende Funktionsbeschreibung
  • Das Kapitel über Unit-Testing-Frameworks könnte kürzer sein, aber vielleicht finden andere Entwickler es nützlich.
  • Einige Rezepte sind fragwürdig:aber das hängt von der Ansicht/Erfahrung ab. Beispiel:Verwendung von bitset . Und ich würde gerne mehr Performance-Themen im Performance-Kapitel sehen.

Insgesamt gefällt mir das Buch. Mit seiner klaren Struktur und den gut geschriebenen Rezepten ist es eine gute Ergänzung für jedes C++-Bücherregal. Es ist für die Zielgruppe gut geeignet:Auch wenn Sie ein Experte sind, erhalten Sie die Möglichkeit, Ihr Wissen aufzufrischen und mit C++14/C++17-Inhalten zu aktualisieren. Und wenn Sie gerade ein Anfängerbuch beendet haben, finden Sie hier Themen, die Sie weiterbringen.

Ich bin beeindruckt, wie Marius zu einem so guten Buch gekommen ist, zumal es, soweit ich weiß, sein erstes ist. Ich denke, die zweite Ausgabe von C++Cookbook wird einfach perfekt :)

Werbegeschenk

Das Gewinnspiel ist beendet! .
Hier sind die Gewinner:

  • Rene Aguirre
  • Josh Kelley
  • Cloud Force

Herzlichen Glückwunsch!

  • Was ist Ihr Lieblingsbereich für modernes C++?
  • Verwenden Sie modernes C++, oder stecken Sie bei einem alten/alten Standard fest?
  • Welche Rezepte für modernes C++ möchten Sie mehr lesen?
  • Welche anderen Bücher würden Sie für modernes C++ vorschlagen?