Das Seminar zu C++20

Aufbauend auf einem Grundverständnis von C++ wird in diesem Kurs der Standard dieser Programmiersprache ISO/IEC 14882:2020 (vereinfacht ISO C++20 oder C++20) vorgestellt. Dabei werden die Änderungen des C++20 Standards gegenüber den alten Standards ISO C++98, ISO C++11/14 und C++17 besprochen. Die Neuerungen werden anhand lauffähiger Beispiele im Seminar demonstriert und eingeübt.

Die folgenden Themen werden durchgenommen:

  • Neue Schlüssel­wörter für den Umgang mit Typen und Deklarationen:
    • auto
    • decltype
    • using
  • Alignment
    • alignas
    • alignof
  • Das Schlüssel­wort nullptr
  • Neue Typen
  • Stark typisierte Enums
  • Enums mit Namensräumen
  • Nicht eingeschränkte Unions
  • Konstante Ausdrücke
  • Das neue Schlüssel­wort constexpr
  • Unicode Unterstüt­zung
  • Unicode Typen
  • Prefixes
  • String­literale
  • Neue Schlüssel­wörter für Klassen­gestaltung
    • override zum kontrollierten Überschreiben von Methoden
    • final zum Finalisieren von Methoden und Klassen
  • Konstruktor­vererbung
  • Konstruktor­delegation
  • Neue Initialisierungs­syntax
  • Initialisierungs­sequenzen:
    • Der Container std::initializer_list<T>
    • Konstruktoren mit Werte­listen
  • Die R-Value Referenz
  • Der Move-Konstruktor
  • Kopierbarkeit und Beweg­barkeit von Objekten
  • Der Gebrauch von std::move()
  • Die Anwendung von std::forward<T>() in Templates
  • Type Traits
  • static_assert
  • Die neuen Möglich­keiten der using-Direktive
  • Template Aliases
  • Namespace Assoziation
  • Lambdas
  • Nachfolgende Definition von Rückgabe­typen
  • Referenzierung des Lambda Aufruf­kontextes
  • Kopieren des Lambda Aufruf­kontextes
  • Variadic Templates
  • Die Thread-Unterstützung der Standard­bibliothek
  • Die Basis­mechanismen des Threadings
  • Mutexe
  • Synchronisierung über Bedingungs­variablen
  • Atomare Operationen
  • Atomare Typen
  • Lokaler Thread­speicher
  • Threading mit Lambdas (closures)
  • Futures
  • Smart Pointers
    • std::unique_ptr<T>
    • std::shared_ptr<T>
    • std::weak_ptr<T>
  • Neue Container
    • std::forward_list<T>
    • std::unordered_set<T>
    • std::unordered_map<T>
  • Reguläre Ausdrücke
  • Generische Lambda Ausdrücke
  • Deduktion des Funktions­rückgabetyps
  • Binäre Literale
  • Nummerngruppen­trenner in Literalen
  • Das deprecated Attribut
  • Komplexere constexpr Funktionen
  • Variablen Templates
  • Variablen­deklarationen in if- und switch-Anweisungen
  • Inline Variablen
  • Entscheidungen zur Compilezeit mit if constexpr()
  • constexpr Lambdas
  • Strukturiertes Binden und Dekomposition
  • Standard Attribute
  • Schachtelausdrücke - engl.: fold expressions
  • Template Argument Deduction für Klassen­templates
  • Deduction Guides
  • Werteparameter für Templates mit auto
  • Elternklassen­initialisierung über die Initialisierungs­liste
  • Die verkürzte Form von static_assert()
  • Wrappertypen:
    • std::any
    • std::optional
    • std::variant
  • std::shared_mutex
  • std::byte
  • Die Bibliothek für das Dateisystem
  • Erweiterungen der Type Traits Bibliothek
  • Parallele Algorithmen

Ergänzungen durch C++20

  • Concepts
  • Module (31.07.2025: dieses Feature ist in den meisten Produktiv­compilern noch in einem experimentellen Zustand)
  • Coroutinen
  • Der Spaceship Operator <=>
  • consteval
  • constinit
  • Erweiterte constexpr Deklaration von Templateparametern in Lambdas
  • using enum
  • Die Ranges Library
  • std::span
  • std::jthread
  • Textformatierung mit std::format
  • Kalender- und Zeitzonenunterstützung
  • Neue Funktionen zur Bitmanipulation

Das Seminar führt theoretisch und praktisch in den neuen Standard ein. Nach den theoretischen Abschnitten werden praktische Übungen eingelegt, sodass die Anwendbarkeit der neuen Sprach- und Bibliotheks­bestandteile vom Teilnehmer getestet werden kann.

Die meisten aktuellen Versionen der üblichen Produktivcompiler unterstützen den C++20 Standard. Die beste Unterstützung liefert der Clang C++ Compiler knapp gefolgt vom GNU C++ Compiler. Das im Seminar eingesetzte Betriebs­system ist unerheblich. Üblicherweise ist es Linux, Windows oder Mac OS X.

Zuletzt geändert am 31.07.2025