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üsselwörter für den Umgang mit Typen und Deklarationen:
autodecltypeusing
- Alignment
alignasalignof
- Das Schlüsselwort
nullptr - Neue Typen
- Stark typisierte Enums
- Enums mit Namensräumen
- Nicht eingeschränkte Unions
- Konstante Ausdrücke
- Das neue Schlüsselwort
constexpr
- Unicode Unterstützung
- Unicode Typen
- Prefixes
- Stringliterale
- Neue Schlüsselwörter für Klassengestaltung
overridezum kontrollierten Überschreiben von Methodenfinalzum Finalisieren von Methoden und Klassen
- Konstruktorvererbung
- Konstruktordelegation
- Neue Initialisierungssyntax
- Initialisierungssequenzen:
- Der Container
std::initializer_list<T> - Konstruktoren mit Wertelisten
- Der Container
- Die R-Value Referenz
- Der Move-Konstruktor
- Kopierbarkeit und Bewegbarkeit von Objekten
- Der Gebrauch von
std::move() - Die Anwendung von
std::forward<T>()in Templates
- Type Traits
static_assert
- Die neuen Möglichkeiten der
using-Direktive - Template Aliases
- Namespace Assoziation
- Lambdas
- Nachfolgende Definition von Rückgabetypen
- Referenzierung des Lambda Aufrufkontextes
- Kopieren des Lambda Aufrufkontextes
- Variadic Templates
- Die Thread-Unterstützung der Standardbibliothek
- Die Basismechanismen des Threadings
- Mutexe
- Synchronisierung über Bedingungsvariablen
- Atomare Operationen
- Atomare Typen
- Lokaler Threadspeicher
- 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 Funktionsrückgabetyps
- Binäre Literale
- Nummerngruppentrenner in Literalen
- Das
deprecatedAttribut - Komplexere
constexprFunktionen - Variablen Templates
- Variablendeklarationen in
if- undswitch-Anweisungen - Inline Variablen
- Entscheidungen zur Compilezeit mit
if constexpr() constexprLambdas- Strukturiertes Binden und Dekomposition
- Standard Attribute
- Schachtelausdrücke - engl.: fold expressions
- Template Argument Deduction für Klassentemplates
- Deduction Guides
- Werteparameter für Templates mit
auto - Elternklasseninitialisierung über die Initialisierungsliste
- Die verkürzte Form von
static_assert()
- Wrappertypen:
std::anystd::optionalstd::variant
std::shared_mutexstd::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 Produktivcompilern noch in einem experimentellen Zustand)
- Coroutinen
- Der Spaceship Operator
<=> constevalconstinit- Erweiterte
constexprDeklaration von Templateparametern in Lambdas using enum- Die Ranges Library
std::spanstd::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 Bibliotheksbestandteile 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 Betriebssystem ist unerheblich. Üblicherweise ist es Linux, Windows oder MacOSX.
Zuletzt geändert am 31.07.2025