Eine Tour durch C++ - Der praktische Leitfaden für modernes C++

Book description

  • Die neuesten Sprachfeatures im Überblick
  • Verfasst vom Entwickler von C++
  • Übersetzung der 3. Auflage

Dieses Buch bietet erfahrenen Programmierern einen praktischen Überblick über C++20 nach ISO-Standard und damit ein klares Verständnis für den Einsatz von modernem C++. Anhand vieler Codebeispiele und hilfreicher Praxistipps wird ein Großteil der Hauptfeatures der Sprache sowie der Standardbibliothek behandelt, die für den effektiven Einsatz unverzichtbar sind.

Stroustrup stellt die einzelnen Sprachfeatures von C++ vor und zeigt, wie sie im Kontext der unterstützten Programmierstile eingesetzt werden, beispielsweise der objektorientierten oder generischen Programmierung. Seine Tour beginnt mit den Grundlagen und setzt den Fokus anschließend auf fortgeschrittene Techniken, wobei er insbesondere auf die neueren Sprach-features eingeht.

Dieses Buch deckt zahlreiche Features ab, die mit C++20 neu eingeführt wurden, darunter Module, Konzepte, Koroutinen und Bereiche. Selbst einige schon jetzt verfügbare Komponenten, die nicht vor C++23 in den Standard integriert werden sollen, werden vorgestellt.

Wenn Sie bereits Programmierkenntnisse in C++ oder einer anderen Sprache haben, ist dies die kompakteste und verständlichste Einführung, um die Besonderheiten und Vorteile von modernem C++ kennenzulernen.

Aus dem Inhalt
  • Die Grundlagen: Funktionen, Referenzen, Zeiger und mehr
  • Benutzerdefinierte Typen
  • Modularität
  • Fehlerbehandlung
  • Klassen
  • Operationen
  • Templates
  • Konzepte und generische Programmierung
  • Die Standardbibliothek
  • Strings und reguläre Ausdrücke
  • Streams
  • Algorithmen
  • Bereiche (Ranges)
  • Zeiger und Container
  • Utilities
  • Numerik
  • Nebenläufigkeit
  • Zahlreiche Ratschläge für die effektive Programmierung aus den »C++ Core Guidelines«

Table of contents

  1. Impressum
  2. Einleitung
    1. Danksagungen
    2. Über die Fachkorrektoren der deutschen Ausgabe
  3. Kapitel 1: Die Grundlagen
    1. 1.1 Einführung
    2. 1.2 Programme
      1. 1.2.1 ‌Hello, World!
    3. 1.3 ‌Funktionen
    4. 1.4 Typen, Variablen und Arithmetik
      1. 1.4.1 Rechenoperatoren
      2. 1.4.2 Initialisierung
    5. 1.5 Gültigkeitsbereich und ‌Lebensdauer
    6. 1.6 ‌Konstanten
    7. 1.7 Zeiger, ‌Arrays und ‌Referenzen
      1. 1.7.1 Der ‌Null-Pointer
    8. 1.8 Bedingungen prüfen
    9. 1.9 Auf Hardware abbilden
      1. 1.9.1 ‌Zuweisung
      2. 1.9.2 ‌Initialisierung
    10. 1.10 Ratschläge
  4. Kapitel 2: Benutzerdefinierte Typen
    1. 2.1 Einführung
    2. 2.2 Strukturen
    3. 2.3 Klassen
    4. 2.4 Aufzählungen
    5. 2.5 Unions
    6. 2.6 Ratschläge
  5. Kapitel 3: Modularität
    1. 3.1 Einführung
    2. 3.2 Separates Kompilieren
      1. 3.2.1 Header-Dateien
      2. 3.2.2 Module
    3. 3.3 Namensräume
    4. 3.4 Funktionsargumente und Rückgabewerte
      1. 3.4.1 Argumentübergabe
      2. 3.4.2 Werterückgabe
      3. 3.4.3 Rückgabetyp ableiten
      4. 3.4.4 Suffix-Rückgabetyp
      5. 3.4.5 Strukturierte Bindung
    5. 3.5 Ratschläge
  6. Kapitel 4: Fehlerbehandlung
    1. 4.1 Einführung
    2. 4.2 Exceptions
    3. 4.3 Invarianten
    4. 4.4 Alternativen für die Fehlerbehandlung
    5. 4.5 Assertions
      1. 4.5.1 assert()
      2. 4.5.2 Statische Assertionen
      3. 4.5.3 noexcept
    6. 4.6 Ratschläge
  7. Kapitel 5: Klassen
    1. 5.1 Einführung
      1. 5.1.1 Klassen
    2. 5.2 Konkrete Typen
      1. 5.2.1 Ein arithmetischer Typ
      2. 5.2.2 Ein Container
      3. 5.2.3 Container initialisieren
    3. 5.3 Abstrakte Typen
    4. 5.4 Virtuelle Funktionen
    5. 5.5 Klassenhierarchien
      1. 5.5.1 Vorteile von Hierarchien
      2. 5.5.2 Die Navigation in einer Hierarchie
      3. 5.5.3 Ressourcenlecks vermeiden
    6. 5.6 Ratschläge
  8. Kapitel 6: Notwendige Operationen
    1. 6.1 Einführung
      1. 6.1.1 Notwendige Operationen
      2. 6.1.2 Konvertierungen
      3. 6.1.3 Member-Initialisierer
    2. 6.2 Kopieren und Verschieben
      1. 6.2.1 Container kopieren
      2. 6.2.2 Container verschieben
    3. 6.3 Ressourcenverwaltung
    4. 6.4 Operatoren überladen
    5. 6.5 Konventionelle Operationen
      1. 6.5.1 Vergleiche (Relationale Operatoren)
      2. 6.5.2 Container-Operationen
      3. 6.5.3 Iteratoren und »smarte Zeiger«
      4. 6.5.4 Eingabe- und Ausgabeoperationen
      5. 6.5.5 swap()
      6. 6.5.6 hash<>
    6. 6.6 Benutzerdefinierte Literale
    7. 6.7 Ratschläge
  9. Kapitel 7: Templates
    1. 7.1 Einführung
    2. 7.2 Parametrisierte Typen
      1. 7.2.1 Beschränkte Template-Argumente
      2. 7.2.2 Wert-Template-Argumente
      3. 7.2.3 Deduktion von Template-Argumenten
    3. 7.3 Parametrisierte Operationen
      1. 7.3.1 Funktions-Templates
      2. 7.3.2 Funktionsobjekte
      3. 7.3.3 Lambda-Ausdrücke
    4. 7.4 Template-Mechanismen
      1. 7.4.1 Variablen-Templates
      2. 7.4.2 Aliasse
      3. 7.4.3 Compile-Zeit-if
    5. 7.5 Ratschläge
  10. Kapitel 8: Konzepte und generische Programmierung
    1. 8.1 Einführung
    2. 8.2 Konzepte
      1. 8.2.1 Verwendung von Konzepten
      2. 8.2.2 Konzeptbasiertes Überladen
      3. 8.2.3 Gültiger Code
      4. 8.2.4 Definition von Konzepten
      5. 8.2.5 Konzepte und auto
      6. 8.2.6 Konzepte und Typen
    3. 8.3 Generische Programmierung
      1. 8.3.1 Verwendung von Konzepten
      2. 8.3.2 Abstraktion mittels Templates
    4. 8.4 Variadische Templates
      1. 8.4.1 Fold-Ausdrücke
      2. 8.4.2 Argumente weitergeben
    5. 8.5 Modell der Template-Kompilierung
    6. 8.6 Ratschläge
  11. Kapitel 9: Überblick über die Bibliothek
    1. 9.1 Einführung
    2. 9.2 Komponenten der Standardbibliothek
    3. 9.3 Organisation der Standardbibliothek
      1. 9.3.1 Namensräume
      2. 9.3.2 Der Namensraum ranges
      3. 9.3.3 Module
      4. 9.3.4 Header
    4. 9.4 Ratschläge
  12. Kapitel 10: Strings und reguläre Ausdrücke
    1. 10.1 Einführung
    2. 10.2 Strings
      1. 10.2.1 Die Implementierung von string
    3. 10.3 String-Views
    4. 10.4 Reguläre Ausdrücke
      1. 10.4.1 Suche
      2. 10.4.2 Notation regulärer Ausdrücke
      3. 10.4.3 Iteratoren
    5. 10.5 Ratschläge
  13. Kapitel 11: Eingabe und Ausgabe
    1. 11.1 Einführung
    2. 11.2 Ausgabe
    3. 11.3 Eingabe
    4. 11.4 I/O-Status
    5. 11.5 Ein-/Ausgabe benutzerdefinierter Typen
    6. 11.6 Ausgabeformatierung
      1. 11.6.1 Stream-Formatierung
      2. 11.6.2 Formatierung im printf()-Stil
    7. 11.7 Streams
      1. 11.7.1 Standard-Streams
      2. 11.7.2 Datei-Streams
      3. 11.7.3 String-Streams
      4. 11.7.4 Speicher-Streams
      5. 11.7.5 Synchronisierte Streams
    8. 11.8 Ein-/Ausgaben im C-Stil
    9. 11.9 Dateisystem
      1. 11.9.1 Pfade
      2. 11.9.2 Dateien und Verzeichnisse
    10. 11.10 Ratschläge
  14. Kapitel 12: Container
    1. 12.1 Einführung
    2. 12.2 vector
      1. 12.2.1 Elemente
      2. 12.2.2 Bereichsüberprüfung
    3. 12.3 list
    4. 12.4 forward_list
    5. 12.5 map
    6. 12.6 unordered_map
    7. 12.7 Allokatoren
    8. 12.8 Ein Überblick über Container
    9. 12.9 Ratschläge
  15. Kapitel 13: Algorithmen
    1. 13.1 Einführung
    2. 13.2 Verwendung von Iteratoren
    3. 13.3 Iterator-Typen
      1. 13.3.1 Stream-Iteratoren
    4. 13.4 Verwendung von Prädikaten
    5. 13.5 Überblick über Algorithmen
    6. 13.6 Parallele Algorithmen
    7. 13.7 Ratschläge
  16. Kapitel 14: Bereiche (Ranges)
    1. 14.1 Einführung
    2. 14.2 Views
    3. 14.3 Generatoren
    4. 14.4 Pipelines
    5. 14.5 Überblick über Konzepte
      1. 14.5.1 Typkonzepte
      2. 14.5.2 Iterator-Konzepte
      3. 14.5.3 Bereichskonzepte
    6. 14.6 Ratschläge
  17. Kapitel 15: Zeiger und Container
    1. 15.1 Einführung
    2. 15.2 Zeiger
      1. 15.2.1 unique_ptr und shared_ptr
      2. 15.2.2 span
    3. 15.3 Container
      1. 15.3.1 array
      2. 15.3.2 bitset
      3. 15.3.3 pair
      4. 15.3.4 tuple
    4. 15.4 Alternativen
      1. 15.4.1 variant
      2. 15.4.2 optional
      3. 15.4.3 any
    5. 15.5 Ratschläge
  18. Kapitel 16: Utilities
    1. 16.1 Einführung
    2. 16.2 Zeit
      1. 16.2.1 Uhren
      2. 16.2.2 Kalender
      3. 16.2.3 Zeitzonen
    3. 16.3 Funktionsanpassung
      1. 16.3.1 Lambdas als Adapter
      2. 16.3.2 mem_fn()
      3. 16.3.3 function
    4. 16.4 Typfunktionen
      1. 16.4.1 Typprädikate
      2. 16.4.2 Bedingte Eigenschaften
      3. 16.4.3 Typgeneratoren
      4. 16.4.4 Assoziierte Typen
    5. 16.5 source_location
    6. 16.6 move() und forward()
    7. 16.7 Bitmanipulation
    8. 16.8 Ein Programm beenden
    9. 16.9 Ratschläge
  19. Kapitel 17: Numerik
    1. 17.1 Einführung
    2. 17.2 Mathematische Funktionen
    3. 17.3 Numerische Algorithmen
      1. 17.3.1 Parallele numerische Algorithmen
    4. 17.4 Komplexe Zahlen
    5. 17.5 Zufallszahlen
    6. 17.6 Vektorarithmetik
    7. 17.7 Numerische Grenzen
    8. 17.8 Typ-Aliasse
    9. 17.9 Mathematische Konstanten
    10. 17.10 Ratschläge
  20. Kapitel 18: Nebenläufigkeit
    1. 18.1 Einführung
    2. 18.2 Tasks und thread
      1. 18.2.1 Argumente übergeben
      2. 18.2.2 Ergebnisse zurückgeben
    3. 18.3 Daten gemeinsam nutzen
      1. 18.3.1 mutexe und Locks
      2. 18.3.2 atomic
    4. 18.4 Warten auf Ereignisse
    5. 18.5 Kommunizierende Tasks
      1. 18.5.1 future und promise
      2. 18.5.2 packaged_task
      3. 18.5.3 async()
      4. 18.5.4 Einen Thread stoppen
    6. 18.6 Koroutinen
      1. 18.6.1 Kooperatives Multitasking
    7. 18.7 Ratschläge
  21. Kapitel 19: Geschichte und Kompatibilität
    1. 19.1 Geschichte
      1. 19.1.1 Chronik
      2. 19.1.2 Die frühen Jahre
      3. 19.1.3 Die ISO-C++-Standards
      4. 19.1.4 Standards und Stil
      5. 19.1.5 Verwendung von C++
      6. 19.1.6 Das C++-Modell
    2. 19.2 Die Entwicklung der Merkmale von C++
      1. 19.2.1 Sprachmerkmale von C++11
      2. 19.2.2 Sprachmerkmale von C++14
      3. 19.2.3 Sprachmerkmale von C++17
      4. 19.2.4 Sprachmerkmale von C++20
      5. 19.2.5 Komponenten der C++11-Standardbibliothek
      6. 19.2.6 Komponenten der C++14-Standardbibliothek
      7. 19.2.7 Komponenten der C++17-Standardbibliothek
      8. 19.2.8 Komponenten der C++20-Standardbibliothek
      9. 19.2.9 Entfernte und veraltete Funktionsmerkmale
    3. 19.3 C/C++-Kompatibilität
      1. 19.3.1 C und C++ sind Geschwister
      2. 19.3.2 Kompatibilitätsprobleme
    4. 19.4 Ratschläge
  22. Anhang A: module std
    1. A.1 Einführung
    2. A.2 Benutzen Sie, was Ihre Implementierung zu bieten hat
    3. A.3 Benutzen Sie Header
    4. A.4 Machen Sie sich Ihr eigenes module std
    5. A.5 Ratschläge
  23. Anhang B: Literaturverzeichnis
    1. B.1 Literaturhinweise

Product information

  • Title: Eine Tour durch C++ - Der praktische Leitfaden für modernes C++
  • Author(s): Bjarne Stroustrup
  • Release date: June 2023
  • Publisher(s): mitp Verlag
  • ISBN: 9783747506271