E-Book, Deutsch, 320 Seiten
ISBN: 978-3-95875-050-0
Verlag: O'Reilly
Format: PDF
Kopierschutz: 0 - No protection
Weitere Infos & Material
1;Effektives modernes C++;3
1.1;Inhalt;5
1.2;Danksagung;11
1.3;Kapitel – Einleitung;15
1.3.1;Begriffe und Konventionen;16
1.3.2;Fehler und Verbesserungsvorschläge;20
1.3.3;Verwendung der Codebeispiele;21
1.3.4;Kontakt;21
1.4;Kapitel 1 – Typen ableiten;23
1.4.1;Technik 1: Typableitung beim Template;23
1.4.1.1;Fall 1: ParamType ist eine Referenz oder ein Zeiger, aber keine universelle Referenz;25
1.4.1.2;Fall 2: ParamType ist eine universelle Referenz;26
1.4.1.3;Fall 3: ParamType ist weder ein Zeiger noch eine Referenz;27
1.4.1.4;Array-Argumente;28
1.4.1.5;Funktionsargumente;30
1.4.2;Technik 2: Die auto-Typableitung verstehen;31
1.4.3;Technik 3: Verstehen Sie decltype;36
1.4.4;Technik 4: Zeigen Sie abgeleitete Typen an;42
1.4.4.1;IDE-Editoren;42
1.4.4.2;Compiler-Diagnose;43
1.4.4.3;Ausgabe zur Laufzeit;43
1.5;Kapitel 2 – auto;49
1.5.1;Technik 5: Ziehen Sie auto einer expliziten Typdeklaration vor;49
1.5.2;Technik 6: Nutzen Sie explizit typisierte Initializer, wenn auto unerwünschte Typen ableitet;54
1.6;Kapitel 3 – Der Wechsel zu modernem C++;61
1.6.1;Technik 7: Der Unterschied zwischen () und {} beim Erstellen von Objekten;61
1.6.2;Technik 8: Nutzen Sie nullptr statt 0 oder NULL;69
1.6.3;Technik 9: Nutzen Sie Alias-Deklarationen statt typedefs;73
1.6.4;Technik 10: Nutzen Sie enums mit Gültigkeitsbereich;77
1.6.5;Technik 11: Nutzen Sie gelöschte statt private, undefinierte Funktionen;83
1.6.6;Technik 12: Deklarieren Sie überschreibende Funktionen per override;88
1.6.7;Technik 13: Nutzen Sie const_iterator statt iterator;94
1.6.8;Technik 14: Deklarieren Sie Funktionen als noexcept, wenn sie keine Exceptions auslösen werden;97
1.6.9;Technik 15: Verwenden Sie nach Möglichkeit immer constexpr;104
1.6.10;Technik 16: Machen Sie const-Member-Funktionen Thread-sicher;110
1.6.11;Technik 17: Verstehen Sie, wie spezielle Member-Funktionen generiert werden;115
1.7;Kapitel 4 – Smart Pointer;123
1.7.1;Technik 18: Verwenden Sie std::unique_ptr zum Verwalten exklusiver Ressourcen;124
1.7.2;Technik 19: Verwenden Sie std::shared_ptr für das Verwalten von gemeinsam genutzten Ressourcen;130
1.7.3;Technik 20: Verwenden Sie std::weak_ptr für std::shared_ptr-artige Zeiger, die hängen können;139
1.7.4;Technik 21: Verwenden Sie std::make_unique und std::make_shared statt new;144
1.7.5;Technik 22: Definieren Sie spezielle Member-Funktionen in der Implementierungsdatei, wenn Sie das Pimpl-Idiom verwenden;152
1.8;Kapitel 5 – Rvalue-Referenzen, Move-Semantik und Perfect Forwarding;161
1.8.1;Technik 23: Verstehen Sie std::move und std::forward;162
1.8.2;Technik 24: Unterscheiden Sie zwischen universellen Referenzen und Rvalue-Referenzen;167
1.8.3;Technik 25: Verwenden Sie std::move bei Rvalue-Referenzen und std::forward bei universellen Referenzen;171
1.8.4;Technik 26: Vermeiden Sie das Überladen mit universellen Referenzen;179
1.8.5;Technik 27: Machen Sie sich mit Alternativen zum Überladen mit universellen Referenzen vertraut;186
1.8.5.1;Kein Überladen mehr;186
1.8.5.2;Übergabe als const T&;186
1.8.5.3;Übergabe By-Value;186
1.8.5.4;Tag Dispatching;187
1.8.5.5;Templates mit universellen Referenzen einschränken;190
1.8.5.6;Abwägungen;196
1.8.6;Technik 28: Verstehen Sie das Reference Collapsing;198
1.8.7;Technik 29: Gehen Sie davon aus, dass Move-Operationen nicht vorhanden, nicht günstig oder nicht einsetzbar sind;203
1.8.8;Technik 30: Machen Sie sich mit den Problemfällen beim Perfect Forwarding vertraut;207
1.8.8.1;Braced Initializers;208
1.8.8.2;0 oder NULL als Null-Zeiger;210
1.8.8.3;Rein deklarierte ganzzahlige static const-Attribute;210
1.8.8.4;Überladene Funktions- und Template-Namen;211
1.8.8.5;Bitfelder;213
1.8.8.6;Ergebnis;214
1.9;Kapitel 6 – Lambda-Ausdrücke;215
1.9.1;Technik 31: Vermeiden Sie Standard-Capture-Modi;216
1.9.2;Technik 32: Nutzen Sie ein Init Capture, um Objekte in Closures zu verschieben;223
1.9.3;Technik 33: Nutzen Sie decltype für auto&&-Parameter, um sie per std::forward weiterzuleiten;228
1.9.4;Technik 34: Nutzen Sie Lambdas statt std::bind;231
1.10;Kapitel 7 – Die Concurrency-API;239
1.10.1;Technik 35: Programmieren Sie Task-basiert statt Thread-basiert;239
1.10.2;Technik 36: Geben Sie std::launch::async an, wenn Asynchronität entscheidend ist;243
1.10.3;Technik 37: Sorgen Sie dafür, dass std::threads auf allen Ablaufpfaden nicht zusammenführbar sind;247
1.10.4;Technik 38: Berücksichtigen Sie das unterschiedliche Verhalten beim Zerstören von Thread-Handles;254
1.10.5;Technik 39: Nutzen Sie void-Futures für die einmalige Kommunikation von Ereignissen;259
1.10.6;Technik 40: Verwenden Sie std::atomic in Concurrency-Situationen und volatile für spezielle Speicherbereiche;267
1.11;Kapitel 8 – Wertübergabe und Emplacement;275
1.11.1;Technik 41: Erwägen Sie die Wertübergabe bei kopierbaren Parametern, die sich mit wenig Aufwand verschieben lassen und die immer kopiert werden;275
1.11.2;Technik 42: Erwägen Sie den Einsatz von Emplacement statt Einfügen;285
1.12;Index;295
1.13;Über den Autor;309
1.14;Über den Übersetzer;309
1.15;Kolophon;309