- Move-Semantik einsetzen um laufzeitintensives Kopieren durch schnelles Verschieben zu ersetzen
- Move-Semantik einsetzen um Daten zu verschieben, die nicht kopierbar sind
- RValues und LValues
- Verschiebe-Semantik (Move–Semantic) erklärt
- Verschiebe-Semantik mit dem Swap-Idiom realisiert
- „Rule of Three”, „Rule of Five” und „Rule of Zero”
- Vereinbarung von Variablen / Automatic Type Deduction
- Neuartige Möglichkeit in der Definition von Funktionen / Function Return Type Deduction
- Funktionsdefinition mit Trailing Return Type
- Verlust von
constund&(Referenz) beiauto decltype(auto)- Möglichkeiten des Gebrauchs von
autoim Vergleich
- Anonyme Funktionsobjekte
- Historische Betrachtung: Funktionen → aufrufbare Objekte → Lambdas
- Erfassungsklausel / Capture-Clause / Closure von Lambdas
- Lambdas:
autoundstd::function<T> - IIFE – Immediately Invoked Functional Expression
- „Generalized Lambda Capture”
- C++20: „Variadic Capture”
- Übersicht
- Automatic Type Deduction bei generischen Lambda Ausdrücken
- Lambda Ausdrücke mit
template-Header - Perfect Forwarding mit generischen Lambdas
- Rekursive Lambda Ausdrücke
- Currying in C++
- Konzept von „C++ Concepts”:
concept requires-Klausel- Benutzerdefinierte Einschränkungen (user-defined requirements)
- Initialisierung („Brace Initialization” bzw. „Uniform Initialization”)
- Initialisierungslisten (
std::initializer_list)
- Structured Binding
- Range-based
for–Loop - Copy/Move Elision
- Placement New: Trennung von Speicherallokation und Objektkonstruktion
- Vererbung: Schlüsselwörter
override,virtual,final - Argument-Dependent Name Lookup (ADL) / Koenig-Lookup
- Zeiger mit einem Besitzer:
std::unique_ptr - Intelligenter Zeiger mit Referenzzählung:
std::shared_ptr - Spezieller intelligenter Zeiger in Verbindung mit
std::shared_ptr:std::weak_ptr - Memory Leaks Detection
- Funktionen mit
constexprverwenden um teure Berechnungen in die Übersetzungszeit zu verschieben constexprerklärt- Klassen / benutzerdefinierte Datentypen mit
constexprKonstruktoren constexpr-Funktionen undconstexpr-Lambda-Funktionenconst,constexpr,constevalundconstinit
- Beispiel eines Literals
0xFF0000_rgb - Benutzerdefinierte Literale und
constexpr
- Einführende Beispiele
- Klassen-Templates mit mehreren Parametern
- Definition von Methoden eines Klassen-Templates
- Eine Methode eines Klassen-Templates spezialisieren
- Klassen-Templates und Non-Type Parameter
- Member Function Template (Method Template)
- Ein Template mit Template-Parametern
- Default-Werte für Template-Parameter
- Alias Template
- Partielle und explizite Template Spezialisierung
- Übersetzungsmodelle für Templates
- Two-Phase Name Lookup
- Überladen und Spezialisieren von Funktions-Templates
- Spezialisieren von Funktions-Templates
- STL-Container, -Iteratoren, -Algorithmen und aufrufbare Objekte
- Von sequentiellen auf ungeordnete assoziative Container umsteigen, um die Laufzeit zu verbessern
- Algorithmen
- STL-Algorithmen und Lambdas
std::fill,std::for_each,std::generatestd::copy,std::transform,std::accumulatestd::all_of,std::any_ofundstd::none_ofstd::back_inserter(Iteratoren-Adapter)- Das Erase-Remove-Idiom
- Grundlagen
- Wiederholungsanweisung, bedingte Anweisung und Rückgabewert
- Eigenschaften von Datentypen zur Übersetzungszeit betrachten / ändern
decltypeundstd::declvalIterator::value_typeundIterator::iterator_categorystd::remove_referenceundstd::remove_consterkärt
- Konzept von „C++ Concepts”:
concept requires-Klausel nach der Template-Parameterliste- Eingeschränkte Template Parameter
- Allgemeines / Einführende Beispiele
- Anwendungsfall: Zugriff auf jedes einzelne Argument
- Anwendungsfall: Mixins
- Anwendungsfall: emplace-Technik
- Perfect Forwarding (Universal Reference)
constexpr ifstd::invoke
- Grundlagen
- Folding „über einem Komma”
- Grundlagen
- Pure Funktionen
- Partial Application und Currying
- Funktionen höherer Ordnung
- Filter-Map-Reduce Pattern
- Ein Beispiel mit STL und Ranges
- Allgemeines / Erläuterung
- Beispiel Klasse
Matrix
- Klasse
std::string_view - SSO (Small String Optimization)
std::array,std::to_arrayundstd::span:
Speicher- und Laufzeitcharakteristik eines C-Arrays mit der Schnittstelle eines C++-Vektors verbindenstd::optionalstd::variantstd::anystd::pairstd::tuplestd::reference_wrapperundstd::refstd::common_type- Vertiefungen zu
std::variant: Das Visitor-Konzept mitstd::visitund das sog. Overload–Pattern
- Keine Ausnahmesicherheit (No Exception Safety)
- Elementare Ausnahmesicherheit (Basic Exception Safety)
- Starke Ausnahmesicherheit (Strong Exception Safety)
- No-throw-Garantie (No-throw guarantee)
- Was ist Type Erasure
- Implementierung des Type Erasure Idioms
- Ergänzung um Konzepte (
concept) - Vergleich (Performanzbetrachtung) von statischem Polymorphismus (Templates) mit dynamischem Polymorphismus (virtueller Methodenaufrufmechanismus)
- Beispiel „Buchhandlung” (statischer versus dynamischer Polymorphismus)
- Allgemeines
- Beispiel „Mixins”
- RAII
- Nebenläufige Ausführung: Klasse
std::thread - Mutexe und Sperrmechanismen
- Nochmals nebenläufige Ausführung: Funktion
std::asyncund Thread-Pool - Futures und Promises: Klassen
std::futureundstd::promise - Funktionen verpacken: Klasse
std::packaged_task - Nochmals nebenläufige Ausführung: Klasse
std::jthread - Die Klassen
std::stop_source,std::stop_tokenundstd::stop_callback - Verriegelungen und Barrieren: Klassen
std::latchundstd::barrier - Semaphore: Klassen
std::binary_semaphoreundstd::counting_semaphore - Parallelisierung von STL-Algorithmen
- Anwendungsbeispiel: Das Erzeuger-Verbraucher Problem
- Anwendungsbeispiel: Event Loop - Ereigniswarteschlange
- Modularisierte Standardbibliothek
- The Return of „
printf”:std::print(ln)in C++ 23 - C++ Standard-Attribute
- Neue Klasse zur Fehlerbehandlung:
std::expected - Klasse
std::source_location - Funktion
std::to_underlying
- Concepts
- Ranges
- Coroutines
- Module
std::format- Spaceship Operator
<=>
- Reflection