- Move-Semantik einsetzen um teures Kopieren durch billiges Verschieben zu ersetzen
- Move-Semantik einsetzen um Daten zu verschieben, die nicht kopiert werden können
- RValues und LValues
- Verschiebe-Semantik (Move–Semantics) erklärt
- „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
const
und&
(Referenz) beiauto
decltype(auto)
- Möglichkeiten des Gebrauchs von
auto
im Vergleich
- Historische Betrachtung (Funktionen, aufrufbare Objekte, Lambdas)
- Capture-Klausel
- Closure von Lambdas
- Lambdas und
std::function<T>
- Zusammenhang Lambda-Objekt und aufrufbare Objekte
- IIFE – Immediately Invoked Functional Expression
- Ü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
constexpr
verwenden um teure Berechnungen in die Übersetzungszeit zu verschieben constexpr
erklärt- Klassen / benutzerdefinierte Datentypen mit
constexpr
Konstruktoren constexpr
-Funktionen undconstexpr
-Lambda-Funktionenconst
,constexpr
,consteval
undconstinit
- 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::generate
std::accumulate
std::transform
std::back_inserter
(Iterator-Adapter)- Das Erase-Remove-Idiom
- Grundlagen
- Wiederholungsanweisung, bedingte Anweisung und Rückgabewert
- Eigenschaften von Datentypen zur Übersetzungszeit betrachten / ändern
decltype
undstd::declval
Iterator::value_type
undIterator::iterator_category
std::remove_reference
undstd::remove_const
erkä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 if
std::invoke
- Grundlagen
- Folding „über einem Komma”
- Grundlagen
- Pure Funktionen
- Funktionen höherer Ordnung
- Ein Beispiel mit STL und Ranges
- Allgemeines / Erläuterung
- Beispiel Klasse
Matrix
- Klasse
std::string_view
- SSO (Small String Optimization)
std::array
,std::to_array
undstd::span
:
Speicher- und Laufzeitcharakteristik eines C-Arrays mit der Schnittstelle eines C++-Vektors verbindenstd::optional
std::variant
std::any
std::pair
std::tuple
std::reference_wrapper
undstd::ref
std::common_type
- Vertiefungen zu
std::variant
: Das Visitor-Konzept mitstd::visit
und das sog. Overload–Pattern
- 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”
- Allgemeines
- Beispiel „Mixins”
- RAII
- Nebenläufige Ausführung: Klasse
std::thread
- Mutexe und Sperrmechanismen
- Nochmals nebenläufige Ausführung: Funktion
std::async
und Thread-Pool - Futures und Promises: Klassen
std::future
undstd::promise
- Funktionen verpacken: Klasse
std::packaged_task
- Nochmals nebenläufige Ausführung: Klasse
std::jthread
- Die Klassen
std::stop_source
,std::stop_token
undstd::stop_callback
- Verriegelungen und Barrieren: Klassen
std::latch
undstd::barrier
- Semaphore: Klassen
std::binary_semaphore
undstd::counting_semaphore
- Parallelisierung von STL-Algorithmen
- Anwendungsbeispiel: Das Erzeuger-Verbraucher Problem
- Anwendungsbeispiel: Event Loop - Ereigniswarteschlange
- Modularisierte Standardbibliothek
- C++ Standard-Attribute
- Klasse
std::source_location
- Funktion
std::to_underlying
- Concepts
- Ranges
- Coroutines
- Modules
std::format
- Spaceship Operator
<=>