Ich liebe C++ und seine Eigenheiten und dieses Buch gibt einem einen tieferen Einblick in verschiedene Konstrukte, weshalb sie so existieren wie sie es tun, und auch wie man sie verwenden kann. Klare Kaufempfehlung für Leute die schon Erfahrung in C++ haben und Interesse an den Eigenheiten der Sprache haben.
Auf der Suche nach einem Buch für den Urlaub, welches sowohl die umfangreichen C++11 Neuerungen als auch die nachfolgenden C++14 Erweiterungen/Anpassungen beleuchtet, bin ich auf dieses Buch gestoßen. Bereits im Vorwort bei den Danksagungen an die Personen, die für Mr. Meyers Material beigesteuert und Korrektur gelesen haben, dachte ich mir "Wow, das ist ja das who is who der C++ Autoren-Szene". Und die Erwartungen wurden nicht enttäuscht. In Abschnitten ("Items") nimmt sich der Autor jeweils ein Gebiet (z.B. unique_ptr/shared_ptr, Lambdas, auto, move semantic usw.) vor und beleuchtet es wirklich von allen Seiten mit sämtlichen Vor- und Nachteilen. So hat man für jedes neue Feature danach das gute Gefühl, zu wissen, was konkret unter der Haube passiert und ob/wie man es in seine eigenen Projekte übernimmt. Sehr hilfreich sind dabei auch die Hinweise, wenn C++14 nochmal eine Schippe drauf legt (auto in Lambdas, type_traits usw.). Auf diese Weise kann man bei der Migration auf "Modern C++" gleich auf die verbesserte/vereinfachte Syntax von C++14 aufspringen, statt sich mit der (oft noch nicht optimalen) Variante von C++11 zu begnügen - sofern der Compiler es bereits unterstützt. Das Buch ist wahrscheinlich für Anfänger etwas zu schwer, besticht dafür aber durch präzise und stets korrekte Beschreibungen, was bei anderen Autoren manchmal etwas "luschig" daherkommt.Bsp: "You can move the address stored by one unique_ptr object to another using the std::move()function" (Ivor Horton, "Using the C++ Standard Template Libraries") vs. "std::move doesn’t move anything. .... At runtime, neither does anything at all. They generate no executable code. Not a single byte." (Dieses Buch).Manche Items (z.B. die zu den von Meyers bezeichneten "universal references" + reference collapsing) habe ich mir nach erster Lektüre des ganzen Buches noch ein zweites Mal durchgelesen, da man sie nach dem ersten Durchgang und Kenntnis des Gesamtbildes besser versteht. Besonders hervorzuheben wären noch die Codebeispiele: hier wurden keine endlosen Listings abgedruckt um "Seiten zu schinden", sondern stets nur kurze Schnipsel verwendet, die zum Verständnis des Themas hilfreich sind. Ggf. hat der Autor dann Sourcen (z.B. Codeschnipsel aus der C++ Standard Library) ausgedünnt und farblich hervorgehoben, um den Fokus auf den jeweils relevanten Part zu lenken.Ein abschließendes Wort zur von mir genutzten elektronischen Ausgabe:Bei einigen Fachbüchern (C++, Perl) habe ich in der Vergangenheit bereits völlig unbrauchbare e-Books erstanden, bei denen die Code-Beispiele Kraut und Rüben waren (verrutschte Operatoren usw.). Das ist hier glücklicherweise nicht der Fall. Sowohl auf einem Kindle als auch (iPad) Kindle-App sieht alles einwandfrei aus. Zusätzlich hat sich der Autor auch die Mühe gemacht, alle Code-Beispiele extra so zu formatieren, dass sie nicht zu lang werden (64 Spalten max. glaube ich). Bei geeigneter Schriftgröße hat man so auch kein Problem mit Zeilenumbrüchen, die ungültigen Code auf den Schirm zaubern (z.B. Umbruch einer "// Kommentarzeile"). Davon können sich andere Kindle-Ausgaben (z.B. von Herr Stroustrup) mal eine Scheibe abschneiden ;-)
Das Buch bietet eine sehr gute Einführung in C++14 für die Leute die jahrelang mit C++98/03 programmiert haben. Wie es im Buch explizit steht, ein sehr gutes Kenntnis von C++98/03 ist erforderlich. Auch manche Themen C++11/14 müssen schon gut bekannt sein, wie die Value Categories für C++Ausdrücke oder wie SFINAE funktioniert.Scott Meyers rules:-)