Das Seminar zu C++17
Aufbauend auf einem Grundverständnis von C++ wird in diesem Kurs der Standard dieser Programmiersprache ISO/IEC 14882:2017 (vereinfacht ISO C++17 oder C++17) vorgestellt. Dabei werden die Änderungen von der neuen Standards gegenüber den alten ISO C++98 und ISO C++11 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:
auto
decltype
using
- Alignment
alignas
alignof
- 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
override
zum kontrollierten Überschreiben von Methodenfinal
zum 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
deprecated
Attribut - Komplexere
constexpr
Funktionen - Variablen Templates
Ergänzungen durch C++17
- Variablendeklarationen in
if
- undswitch
-Anweisungen - Inline Variablen
- Ententscheidungen zur Compilezeit mit
if constexpr()
constexpr
Lambdas- 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()
- Neue Containertypen:
std::any
std::optional
std::variant
std::shared_mutex
std::byte
- Die Bibliothek für das Dateisystem
- Erweiterungen der Type Traits Bibliothek
- Parallele Algorithmen
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++17 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 10.07.2021