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ü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

Ergänzungen durch C++17

  • Variablen­deklarationen 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 Klassen­templates
  • Deduction Guides
  • Werteparameter für Templates mit auto
  • Elternklassen­initialisierung über die Initialisierungs­liste
  • Die verkürzte Form von static_assert()
  • Neue Container­typen:
    • 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 12.05.2024