Skip to content

Buch: C++11 programmieren

Titel

C++11 programmieren

Autor

Torsten T. Will

Sprache

Deutsch

Genre

Sachbuch

Herausgeber

Galileo Computing, 2012

Seitenanzahl

414

Das Buch „C++11 programmieren“ von Torsten T. Will wirbt mit dem Untertitel „60 Techniken für guten C++11-Code“. Die Rezension soll zeigen, ob das stimmt.

Hintergrund

Der neueste C++-Standard sollte eigentlich im letzten Jahrzehnt veröffentlicht werden, nachdem die letzte Standardisierung 2003 stattfand. Der Prozess zog sich aber hin, sodass auch dem angedachten C++0x irgendwann ein C++11 wurde. Im Oktober 2011 wurde der Standard dann offiziell verabschiedet.

Das Buch „C++11 programmieren“ liefert einen Überblick über einen Teil der Neuerungen von C++11 und richtet sich damit vorrangig an erfahrene C++-Programmierer, die auf dem neuesten Stand der Technik gehalten werden wollen. Auch wenn das Buch keine vollständige Liste der Neuerungen beinhaltet, kann es sicherlich auch als Nachschlagewerk benutzt werden. Für den Einstieg in die C++-Programmierung ist es aber gänzlich ungeeignet.

Aufbau

Wer sich das Inhaltsverzeichnis anschaut, dem fällt auf, dass der erste Teil erst bei Seite 27 beginnt. Was treibt der Autor die 26 Seiten davor? Etwas, was man sich von mehr technischen Bücher wünschen würde: ein Vorwort, in dem die Zielgruppe klar definiert wird, sowie ein Beispielkapitel, in dem der Aufbau und die Syntax der späteren echten Kapitel erklärt wird (S.17 ff). So hat man keine Probleme, den Text und die Auszeichnungen zu verstehen.

Der Aufbau eines Kapitels beginnt mit einer kurzen Einleitung, in dem man auch mithilfe von kurzen Codebeispielen das neue Thema klar und verständlich erläutert bekommt. Danach folgt ein Abschnitt mit detaillierten Hintergründen, die sehr genau auf die Beispiele eingehen und alles erklären. Am Ende des Kapitels steht ein Mantra, welches noch einmal ganz kurz in ein, zwei Sätzen zusammenfasst, was die Essenz des Kapitels ist.

Thematisch gliedert sich das Buch in fünf Teile. Der erste Teil soll dabei an C++03 erinnern (also den C++Standard aus 2003), damit man die Neuerungen von C++11, die in anderen Teilen beschrieben werden, besser versteht. Prinzipiell ist das eine gute Idee, wenn der Autor dies konsequent eingehalten hätte. So vermischen sich in dem Teil C++03- und C++11-Syntax, was das Verständnis der Beispiele nicht erleichtert. Ständig fragt man sich: „Hm, das kannte ich ja gar nicht. Ist das schon C++11 oder kenne ich nur den C++03-Standard nicht gut genug?“

Was vielleicht auch nicht so praktisch, aber teilweise verständlich ist: So gut wie nichts wird mit Klassen definiert, sondern es werden nur Strukturen genutzt. Der Autor weist aber am Anfang darauf hin, dass dies für eine echte Programmierung sehr schlechter Stil wäre und man sich daran kein Beispiel nehmen sollte (S. 22).

Der zweite Teil ist dann der interessanteste des Buch, denn es wird auf die neuen Sprachmechanismen von C++11 eingegangen. So kommen unter anderen die neue Art der Initialisierung, Typsicherheit, const_expr, finale Klassen und Ableitungen, die neue Verschiebesemantik und RValues sowie Templates vor. Ob auf alles Wichtige des C++11-Standards eingegangen wird, kann ich nicht beurteilen, die 200 Seiten lesen sich aber sehr informativ und man bekommt ein sehr guten Einblick in die neue Syntax. Vor allem kann man sehr leicht herausfiltern, was für einen selbst wichtig erscheint und welches Sprachfeature man eher nicht sinnvoll einsetzen kann. Interessant wäre noch zu wissen, ob die Dreierregel mit der neuen Verschiebesemantik in einer Fünferregel umgeschrieben werden muss. Torsten T. Will deutet so etwas jedenfalls an, zumal C++ nun noch weniger Standard-Konstruktoren und -Operatoren erstellt, wenn man es nicht explizit sagt.

Mir selbst haben vor allem die neuen const-Möglichkeiten gefallen (S.102), in die auch in Teil 1 (S.39) eingegangen wird. So kann durch ein const an der richtigen Stelle ein fehlerhaftes Design entlarvt werden. Aber auch die neuen Eigenschaften für Klassenoperationen wie override und final (S.139 ff) bzw. delete und default (S.196 ff) finden sicherlich sinnvolle Verwendung.

Der dritte Teil beschäftigt sich ausgiebig mit Containern, Pointern und Algorithmen. Die Aussage am Anfang des Buches (S.36), dass man in C++ auf void-Pointer oder Pointer-Casts verzichten kann, wird beispielsweise durch die neuen unique_ptr und shared_ptr unterstrichen (S. 275 ff). Insgesamt ist das Kapitel sehr sinnvoll für alle, die bereits einige Hilfsmittel der STL (Standard Template Library) einsetzen.

Und in Teil 4 geht es auch mit der STL weiter, denn es werden die Features beschrieben, die dort neu Einzug gehalten haben. Vorrangig ist das sicherlich das Thema Multithreading (S.321), welches auf knappen 34 Seiten abgehandelt wird. Dennoch bekommt man einen guten Einblick in die Möglichkeiten, die C++ hier bietet. Aber auch reguläre Ausdrücke werden nun direkt in C++ unterstützt sowie Einheiten und Umrechnungen.

Im Anhang findet man zum einen eine kurze Übersicht, was man in C++11 nicht mehr tun sollte, da einige Sprachelemente wie register als veraltet deklariert wurden. Noch sinnvoller ist aber die Compilerübersicht in Anhang C (S. 402), die aufzeigen soll, welche C++11-Features welcher Compiler alles umsetzt. Da es sich natürlich um eine gedruckte Liste handelt, ist sie im Buch veraltet, im Apache-Wiki findet man aber den aktuellen Stand. Nur für den GNU-Compiler GCC gibt es diese Liste bei gnu.org.

Fazit

Hält das Buch, was es mit „60 Techniken für guten C++11-Code“ verspricht? Zuerst sei gesagt, dass die 60 sich aus den 62 Kapiteln im Buch ableitet, ansonsten aber keine Bewandtnis hat. Und ob es wirklich guter Code, den Torsten T. Will zeigt, soll gar nicht beurteilt werden, da Programmierer wie Künstler sind jeder seinen eigenen Stil pflegt. Daher lautet die Frage eher: Wird einem Leser aber der neue C++-Standard verständlich beigebracht? Und hier ist die Antwort definitiv ja.

Der Aufbau der Kapitel ist sehr klar und strukturiert. Teilweise Popkultur-Referenzen auf Star Wars, Star Trek oder Herr der Ringe regen zum Schmunzeln an (wenn man mit der Thematik vertraut ist). Sehr schön ist auch, dass die Kapitel zu einem Thema gut ineinander übergehen und sich gegenseitig referenzieren. Die Aufteilung wirkt dadurch sehr gut durchdacht.

Autor Torsten T. Will schafft es auch, die Leser in eine fremde Thematik einzuführen. So gehören Lambda-Funktionen, RValues oder Multithreading nicht zum Alltagsfragen eines Programmierers, dennoch schafft man es auch ohne viel Wissen in dem Gebiet (fast) alles zu verstehen. Daneben gibt es auch viele Hinweise auf guten Programmierstil bzw. Hintergrundinformationen, die sich etwas von C++11 entfernen, aber dennoch nicht jedem C++-Programmierer bekannt sind. So wissen viele nicht, was ein const in Zusammenhang mit Zeigern an der richtigen Stelle für Auswirkungen hat (S. 39).

Eigentlich selbstverständlich, aber leider immer wieder erwähnenswert ist die Fehleranzahl im Buch. Obwohl es sich um die erste Auflage handelt, findet man erfreuliche wenige Fehler im Buch. An einigen Stellen gibt es zwar Buchstabendreher, aber in der Regel erschließt sich sofort aus dem Kontext, wie es richtig lauten muss.

Einen kleinen Problempunkt sehe ich in der Ansprache der Leser. So wird im Text oft von „wir“ gesprochen, womit der Autor sich und die Lesergemeinde meint. An andere Stelle bezeichnet das „wir“ aber den Autor und ggf. die anderen am Buch beteiligten Personen. Im Text selbst wird der Leser dann mit „Sie“ angesprochen, in den Mantras am Ende eines Kapitels aber immer mit „du“. Dies wirkt noch etwas durcheinander, ist aber nur ein kleiner Kritikpunkt.

Zweiter, kleiner Negativpunkt ist die Mischung des Inhaltes. So setzt Torsten T. Will auch in frühen Kapiteln Syntaxelemente aus C++11 ein, die er erst viel später dem Leser bekannt macht. Für Entwickler, die nicht hundertprozentig den C++03-Standard auswendig kennen – und dies kann wohl keiner – ist damit nicht immer klar, ob es sich um ein C++03- oder ein C++11-Feature handelt.

Insgesamt kann man dem Buch aber eine sehr gute Note ausstellen. Es ist übersichtlich, klar strukturiert und interessant geschrieben. Für C++-Entwickler, die den neuen Standard kennen lernen wollen, kann daher eine klare Empfehlung ausgesprochen werden. Für C++-Einsteiger ist das Buch nicht geeignet, aber auch nicht gedacht.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Formular-Optionen