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 Methoden
    • final zum Finalisieren von Methoden und Klassen
  • Konstruktorvererbung
  • Konstruktordelegation
  • Neue Initialisierungssyntax
  • Initialisierungssequenzen:
    • Der Container std::initializer_list<T>
    • Konstruktoren mit Wertelisten
  • 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- und switch-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 Mac OS X.

Zuletzt geändert am 10.07.2021