O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Effektives modernes C++

Book Description

Um richtig in C++11 und C++14 einzusteigen, reicht es nicht aus, sich mit den neuen Features vertraut zu machen. Die Herausforderung liegt darin, sie effektiv einzusetzen, so dass Ihre Software korrekt, effizient, wartbar und portabel ist. Hier kommt dieses praxisnahe Buch ins Spiel: Es beschreibt, wie Sie wirklich gute Software mit C++11 und C++14 erstellen - also modernes C++ einsetzen. Scott Meyers' Effective C++-Bestseller gelten seit mehr als 20 Jahren als herausragende C++-Ratgeber. Seine klaren, verbindlichen Erläuterungen komplexer technischer Materie haben ihm eine weltweite Anhängerschaft beschert. In diesem Buch nutzt Scott Meyers wieder das bewährte beispielorientierte Konzept seiner früheren Bücher, um Ihnen den optimalen Einsatz von C++11 und C++14 zu veranschaulichen. Das Buch ist Pflichtlektüre für jeden modernen C++-Softwareentwickler.

Table of Contents

  1. Dedication
  2. Danksagung
  3. Einleitung
    1. Begriffe und Konventionen
    2. Fehler und Verbesserungsvorschläge
    3. Verwendung der Codebeispiele
    4. Kontakt
  4. 1. Typen ableiten
    1. Technik 1: Typableitung beim Template
      1. Fall 1: ParamType ist eine Referenz oder ein Zeiger, aber keine universelle Referenz
      2. Fall 2: ParamType ist eine universelle Referenz
      3. Fall 3: ParamType ist weder ein Zeiger noch eine Referenz
      4. Array-Argumente
      5. Funktionsargumente
    2. Technik 2: Die auto-Typableitung verstehen
    3. Technik 3: Verstehen Sie decltype
    4. Technik 4: Zeigen Sie abgeleitete Typen an
      1. IDE-Editoren
      2. Compiler-Diagnose
      3. Ausgabe zur Laufzeit
  5. 2. auto
    1. Technik 5: Ziehen Sie auto einer expliziten Typdeklaration vor
    2. Technik 6: Nutzen Sie explizit typisierte Initializer, wenn auto unerwünschte Typen ableitet
  6. 3. Der Wechsel zu modernem C++
    1. Technik 7: Der Unterschied zwischen () und {} beim Erstellen von Objekten
    2. Technik 8: Nutzen Sie nullptr statt 0 oder NULL
    3. Technik 9: Nutzen Sie Alias-Deklarationen statt typedefs
    4. Technik 10: Nutzen Sie enums mit Gültigkeitsbereich
    5. Technik 11: Nutzen Sie gelöschte statt private, undefinierte Funktionen
    6. Technik 12: Deklarieren Sie überschreibende Funktionen per override
    7. Technik 13: Nutzen Sie const_iterator statt iterator
    8. Technik 14: Deklarieren Sie Funktionen als noexcept, wenn sie keine Exceptions auslösen werden
    9. Technik 15: Verwenden Sie nach Möglichkeit immer constexpr
    10. Technik 16: Machen Sie const-Member-Funktionen Thread-sicher
    11. Technik 17: Verstehen Sie, wie spezielle Member-Funktionen generiert werden
  7. 4. Smart Pointer
    1. Technik 18: Verwenden Sie std::unique_ptr zum Verwalten exklusiver Ressourcen
    2. Technik 19: Verwenden Sie std::shared_ptr für das Verwalten von gemeinsam genutzten Ressourcen
    3. Technik 20: Verwenden Sie std::weak_ptr für std::shared_ptr-artige Zeiger, die haängen können
    4. Technik 21: Verwenden Sie std::make_unique und std::make_shared statt new
    5. Technik 22: Definieren Sie spezielle Member-Funktionen in der Implementierungsdatei, wenn Sie das Pimpl-Idiom verwenden
  8. 5. Rvalue-Referenzen, Move-Semantik und Perfect Forwarding
    1. Technik 23: Verstehen Sie std::move und std::forward
    2. Technik 24: Unterscheiden Sie zwischen universellen Referenzen und Rvalue-Referenzen
    3. Technik 25: Verwenden Sie std::move bei Rvalue-Referenzen und std::forward bei universellen Referenzen
    4. Technik 26: Vermeiden Sie das Überladen mit universellen Referenzen
    5. Technik 27: Machen Sie sich mit Alternativen zum Überladen mit universellen Referenzen vertraut
      1. Kein Überladen mehr
      2. Übergabe als const T&
      3. Übergabe By-Value
      4. Tag Dispatching
      5. Templates mit universellen Referenzen einschränken
      6. Abwägungen
    6. Technik 28: Verstehen Sie das Reference Collapsing
    7. Technik 29: Gehen Sie davon aus, dass Move-Operationen nicht vorhanden, nicht günstig oder nicht einsetzbar sind
    8. Technik 30: Machen Sie sich mit den Problemfällen beim Perfect Forwarding vertraut
      1. Braced Initializers
      2. 0 oder NULL als Null-Zeiger
      3. Rein deklarierte ganzzahlige static const-Attribute
    9. Überladene Funktions- und Template-Namen
      1. Bitfelder
      2. Ergebnis
  9. 6. Lambda-Ausdrücke
    1. Technik 31: Vermeiden Sie Standard-Capture-Modi
    2. Technik 32: Nutzen Sie ein Init Capture, um Objekte in Closures zu verschieben
    3. Technik 33: Nutzen Sie decltype für auto&&-Parameter, um sie per std::forward weiterzuleiten
    4. Technik 34: Nutzen Sie Lambdas statt std::bind
  10. 7. Die Concurrency-API
    1. Technik 35: Programmieren Sie Task-basiert statt Thread-basiert
    2. Technik 36: Geben Sie std::launch::async an, wenn Asynchronität entscheidend ist
    3. Technik 37: Sorgen Sie dafür, dass std::threads auf allen Ablaufpfaden nicht zusammenführbar sind
    4. Technik 38: Berücksichtigen Sie das unterschiedliche Verhalten beim Zerstören von Thread-Handles
    5. Technik 39: Nutzen Sie void-Futures für die einmalige Kommunikation von Ereignissen
    6. Technik 40: Verwenden Sie std::atomic in Concurrency-Situationen und volatile für spezielle Speicherbereiche
  11. 8. Wertübergabe und Emplacement
    1. Technik 41: Erwägen Sie die Wertübergabe bei kopierbaren Parametern, die sich mit wenig Aufwand verschieben lassen und die immer kopiert werden
    2. Technik 42: Erwaägen Sie den Einsatz von Emplacement statt Einfügen
  12. A. Über den Autor
  13. B. Über den Übersetzer
  14. Stichwortverzeichnis
  15. Kolophon
  16. Copyright