Moderne C++-Programmierung
C++03 / C++11 / C++14 / C++17 / C++20 / C++23 / C++26
Dieser Open-Access -Kurs richtet sich an diejenigen, die bereits mit C und objektorientierter Programmierung vertraut sind und ein Kompetenzniveau in der C++-Programmierung erreichen möchten. Der Kurs behandelt die Grundlagen der C++-Programmierung und geht weiter zu fortgeschrittener C++-Semantik und -Konzepten.
Hauptmerkmale :
- Kostenlos und regelmäßig aktualisiert
- 26 Vorträge, über 1800 Folien
- Beziehen Sie die neuesten Sprachstandardkonzepte und -funktionen ein
- Praktischer Unterricht : nicht ausführliche, kurze strukturierte Beschreibungen im Zusammenhang mit Code
- Minimale Codebeispiele, um nur eine bestimmte Funktion oder ein bestimmtes Problem zu zeigen, ohne abzuschweifen
- Komplementäre Sprachaspekte : Tools, Codierungskonventionen, Projektorganisation und Codeoptimierung
- Erfahrungsbasiert : Viele Aspekte, Beispiele und Probleme stammen aus realen Fällen, mit denen ich während meiner Arbeit als Softwareentwickler konfrontiert war
Wenn Ihnen der Kurs gefällt oder Sie ihn nützlich finden , fügen Sie bitte einen Stern hinzu
KAPITEL
# | TITEL | SCHWERPUNKT |
---|
1 | Einführung (html) | Geschichte von C/C++, Anwendungsgebiete, Kurseinführung |
2 | Vorbereitung (html) | Bücher, Kompilieren, Hallo Welt |
3 | Grundkonzepte I (html) | Typsystem, Grundtypen und Operatoren |
4 | Grundkonzepte II (html) | Integral- und Gleitkommatypen und ihre Arithmetik |
5 | Grundkonzepte III (html) | Entitäten, Enumeratoren, Strukturen, Kontrollflussanweisungen |
6 | Grundkonzepte IV (html) | Heap, Stack, Zeiger, Referenzen, Const-Eigenschaften, Konvertierungsoperatoren |
7 | Grundkonzepte V (html) | Funktionen, Lambda-Ausdrücke, Vorverarbeitungsanweisungen |
8 | Objektorientierte Programmierung I (html) | Klassenhierarchie, Konstruktor, Destruktor, Klassenschlüsselwörter |
9 | Objektorientierte Programmierung II (html) | Polymorphismus, Operatorüberladung |
10 | Vorlagen und Metaprogrammierung I (html) | Funktionsvorlage, Typmerkmale, Dienstprogramme zur Kompilierungszeit |
11 | Vorlagen und Metaprogrammierung II (html) | Klassenvorlage, SFINAE |
12 | Übersetzungseinheiten I (html) | Verknüpfung und eine Definitionsregel |
13 | Übersetzungseinheiten II (html) | Umgang mit mehreren Übersetzungseinheiten und Dateien, #include , Modulen |
14 | Codekonventionen I (html) | Projektorganisation, Einführung in Codekonventionen, Entitätskonventionen |
15 | Codekonventionen II (html) | Vorlage, Namespace, modernes C++, Wartbarkeit, Benennung und Formatierungskonventionen |
16 | Debuggen und Testen (HTML) | Ausführungs-/Speicher-Debugging, Sanitizer, Harding-Techniken, Unit-Test, testgetriebene Entwicklung |
17 | Ökosystem (html) | Cmake, Dokumentation und andere Tools |
18 | Dienstprogramme (html) | Haupt- std |
19 | Container, Iteratoren und Algorithmen (html) | Container, Iteratoren, Algorithmen, Bereiche |
20 | Fortgeschrittene Themen I (html) | Bewegungssemantik, universelle Referenz, Typableitung |
21 | Fortgeschrittene Themen II (html) | Fehlerbehandlung, C++-Redewendungen, intelligente Zeiger |
22 | Leistungsoptimierungen I (html) | Ahmdal-Gesetz, Leistungsgrenzen, Architekturkonzepte (ILP, SIMD usw.), Speicherhierarchie |
23 | Leistungsoptimierungen II (html) | Arithmetische Optimierungen, Speicheroptimierungen usw. |
24 | Leistungsoptimierungen III (html) | Compiler-Optimierungen, Profiling, Benchmarking-Tools |
25 | Softwaredesign I (html) | Grundkonzepte, Prinzipien, Anwendungsfälle |
26 | Softwaredesign II (html) | Designmuster und Redewendungen |
ALL-IN-ONE-BUCH : modern-cpp.pdf (könnte ein paar Commits zurückliegen), HTML
THEMEN IM DETAIL
1. Einführung
- Eine kleine Geschichte der C/C++-Programmiersprachen
- Anwendungsgebiete und Beliebtheit
- C++-Philosophie
- C++-Schwäche : C++-Alternativen, Warum ist der Wechsel zu einer neuen Sprache schwierig?
- Der Kurs
2. Vorbereitung
- Bücher und Referenzen
- Folienlegende
- Welchen Editor/welche IDE/welchen Compiler sollte ich verwenden?
- Wie kompiliert man?
- Hallo Welt : I/O-Stream
3. Grundkonzepte I – Typsystem, Grundtypen und Operatoren
- Das C++-Typsystem : Typkategorien, Typeigenschaften
- Übersicht über grundlegende C++-Typen : Arithmetische Typen, Suffix und Präfix, Nicht standardmäßige arithmetische Typen,
void
Typ, nullptr
- Konvertierungsregeln
-
auto
-Schlüsselwort - C++-Operatoren : Rangfolge der Operatoren, Präfix-/Postfix-Inkrementierungs-/Dekrementierungssemantik, Zuweisungs-, Verbund- und Kommaoperatoren, Raumschiffoperator
<=>
, sichere Vergleichsoperatoren
4. Grundkonzepte II – Integral- und Gleitkommatypen
- Integrale Datentypen : Ganzzahlen mit fester Breite,
size_t
, ptrdiff_t
, uintptr_t
, arithmetische Operationssemantik, Heraufstufung, Trunkierung, undefiniertes Verhalten, Sättigungsarithmentik - Gleitkommatypen und Arithmetik : IEEE-Gleitkommastandard und andere Darstellungen, normale/denormale Werte, Unendlichkeit, keine Zahl (
NaN
), Maschinen-Epsilon, Einheiten am letzten Platz (ULP), Spickzettel, Grenzwerte und nützliche Funktionen, Arithmetik Eigenschaften, Verhalten bei Sonderwerten, Undefiniertes Verhalten, Gleitkommafehler erkennen - Gleitkomma-Probleme : Katastrophale Stornierung, Gleitkomma-Vergleich
5. Grundkonzepte III – Entitäten und Kontrollfluss
- Entitäten
- Erklärung und Definition
- Aufzähler
-
struct
, Bitfield, union
- Kontrollfluss :
if
-Anweisung, for
und while
-Schleifen, Bereichsbasis for
Schleife, switch
, goto
, Warnung vor nicht verwendeten Variablen vermeiden - Namespace : Expliziter globaler Namespace, Namespace-Alias,
using
der Deklaration, using namespace
-Direktive, inline
-Namespace - Attribute :
[[nodiscard]]
, [[maybe_unused]]
, [[deprecated]]
, [[noreturn]]
6. Grundkonzepte IV – Gedächtniskonzepte
- Zeiger : Zeigeroperationen, Adressoperator
&
, Zugriff auf struct
, void
Zeiger, Zeigerkonvertierung, Zeigerarithmetik, Wild- und Dangling-Zeiger - Heap und Stack : Stapelspeicher,
new
, delete
, nicht zuordnende Platzierungszuweisung, nicht werfende Zuweisung, Speicherverlust - Initialisierung : Variableninitialisierung, einheitliche Initialisierung, Array-Initialisierung, Strukturinitialisierung, Strukturbindung, dynamische Speicherinitialisierung
- Referenzen
-
Const
und konstante Ausdrücke : Inhalte und Literale, const
, constexpr
, consteval
, constinit
, if constexpr
, std::is constant evaluated()
, if consteval
-
volatile
Schlüsselwort - Explizite Typkonvertierung :
static_cast
, const_cast
, reinterpret_cast
, Typ-Wortspiel, std::bit_cast
, einheitliche Initialisierungskonvertierung, gls::narrow_cast
-
sizeof
Operator : Übersicht, [[no_unique_address]]
7. Grundkonzepte V – Funktionen und Vorverarbeitung
- Funktionen : Pass-by-Value, Pass-by-Pointer, Pass-by-Reference, Funktionssignatur und Überladung, Überladung und
=delete
, Standardparameter - Funktionszeiger und Funktionsobjekte
- Lambda-Ausdrücke : Capture-Liste, Lambda-Ausdruck und Funktionsbeziehung, Parameterhinweise, Zusammensetzbarkeit, Rekursion,
constexpr/consteval
, template
, mutable
, [[nodiscard]]
, Capture-Liste und Klassen - Vorverarbeitung : Präprozessoren, häufige Fehler, Quellspeicherort-Makros, bedingte Kompilierungsmakros, Stringisierungsoperator (
#
), #error
und #warning
, #pragma
, Token-Pasting-Operator ##
, Variadic-Makro
8. Objektorientierte Programmierung I – Klassenkonzepte
- C++-Klassen : RAII-Idiom
- Klassenhierarchie
- Zugriffsspezifizierer : Vererbungszugriffsspezifizierer. Wann wird
public/protected/private
für Datenelemente verwendet? - Klassenkonstruktor : Standardkonstruktor, Klasseninitialisierung, einheitliche Initialisierung für Objekte, Delegatenkonstruktor,
explicit
Schlüsselwort, [[nodiscard]]
und Klassen - Konstruktor kopieren
- Klassenzerstörer
- Standardkonstruktoren, Destruktoren und Operatoren (
= default
) - Klassenschlüsselwörter :
this
, static
, const
, mutable
, using
, friend
, delete
9. Objektorientierte Programmierung II – Polymorphismus und Operatorüberladung
- Polymorphismus : C++-Mechanismen für Polymorphismus,
virtual
Methoden, virtuelle Tabelle, Schlüsselwort override
, Schlüsselwort final
, häufige Fehler, rein virtuelle Methode, abstrakte Klasse und Schnittstelle - Vererbungsumwandlung und Laufzeittypidentifizierung
- Operatorüberladung : Übersicht, Vergleichsoperator
<
, Raumschiffoperator <=>
, Indexoperator []
, Mehrdimensionaler Indexoperator []
, Funktionsaufrufoperator ()
, statischer Operator []
und Operator ()
, Konvertierungsoperator T()
, Überladung des Rückgabetyps Auflösung, Inkrementierungs- und Dekrementierungsoperatoren ++
/ --
, Zuweisungsoperator =
, Stream-Operator <<
, Operatornotizen - C++-Objektlayout : Aggregat, Trivialklasse, Standardlayoutklasse, einfache alte Daten (POD), Hierarchie
10. Vorlagen und Metaprogrammierung I – Funktionsvorlagen und Dienstprogramme zur Kompilierungszeit
- Funktionsvorlage : Übersicht, Vorlageninstanziierung, Vorlagenparameter, Vorlagenparameter – Standardwert, Überladung, Spezialisierung
- Vorlagenvariable
- Vorlagenparametertypen : Generische Typnotizen,
auto
Platzhalter, Klassenvorlagenparametertyp, Array- und Zeigertypen, Funktionstyp - Dienstprogramme zur Kompilierungszeit :
static_assert
, Schlüsselwort using
, Schlüsselwort decltype
- Typmerkmale : Übersicht, Typmerkmalsbibliothek, Typmanipulation
11. Vorlagen und Metaprogrammierung II – Klassenvorlagen und SFINAE
- Klassenvorlage : Klassenspezialisierung, Klassenvorlagenkonstruktor
- Automatischer Abzug der Konstruktorvorlage (CTAD)
- Klassenvorlage – Erweiterte Konzepte : Klasse + Funktion – Spezialisierung, Abhängige Namen –
typename
und template
, Klassenvorlagenhierarchie und using
, friend
-Schlüsselwort, Vorlagenvorlagenargumente - Vorlagen-Metaprogrammierung
- SFINAE: Substitutionsfehler ist kein Fehler : Funktion SFINAE, Klasse SFINAE
- Variadic-Vorlage : Faltausdruck, Variadic-Klassenvorlage
- C++20-Konzepte : Übersicht,
concept
, requires
Klausel, requires
Ausdruck, requires
Ausdruck + Klausel, requires
Klausel + Ausdruck, requires
und constexpr
, Verschachtelte requires
- Vorlagen-Debugging
12. Übersetzungseinheiten I – Verknüpfung und eine Definitionsregel
- Grundkonzepte : Übersetzungseinheit, lokaler und globaler Geltungsbereich, Verknüpfung
- Speicherklasse und -dauer : Speicherdauer, Speicherklasse,
static
Schlüsselwort, anonymer Namespace, extern
Schlüsselwörter - Verknüpfung von
const
und constexpr
: Fiasko der statischen Initialisierungsreihenfolge - Verknüpfungszusammenfassung
- Umgang mit mehreren Übersetzungseinheiten : Klasse in mehreren Übersetzungseinheiten
- One Definition Rule (ODR) : Globale Variablenprobleme, ODR – Punkt 3,
inline
Funktionen/Variablen, constexpr
und inline
- ODR – Funktionsvorlage : Fälle,
extern
Schlüsselwort - ODR – Klassenvorlage : Fälle,
extern
Schlüsselwort - ODR Undefiniertes Verhalten und Zusammenfassung
13. Übersetzungseinheiten II – Include, Modul und Namespace
-
#include
Probleme : Include-Guard, Forward-Deklaration, zirkuläre Abhängigkeiten, häufige Verknüpfungsfehler - C++20-Module : Übersicht, Terminologie, Sichtbarkeit und Erreichbarkeit, Moduleinheitstypen, Schlüsselwörter, globales Modulfragment, privates Modulfragment, Header-Moduleinheit, Modulpartitionen
- Kompilieren mehrerer Übersetzungseinheiten : Grundlegende Compiler-Flags, Kompilierungsmethoden
- Bibliotheken in C++ : Statische Bibliothek, Statische Bibliotheken erstellen, Statische Bibliotheken verwenden, Dynamische Bibliothek, Dynamische Bibliotheken erstellen, Dynamische Bibliotheken verwenden, Binäre Anwendungsschnittstelle (ABI), Demangling, Dynamische Bibliotheksabhängigkeiten finden, Objekt-/ausführbare Symbole analysieren
14. Kodexkonventionen I
- C++-Projektorganisation : Projektverzeichnisse, Projektdateien, „Allgemeine“ Notizen zur Projektorganisation, Alternative – „kanonische“ Projektorganisation
- Codierungsstile und -konventionen : Übersicht, beliebte Codierungsstile
- Header-Dateien und
#include
: #include
Schutz, #include
Syntax, Reihenfolge von #include
, allgemeine Konventionen für Header-/Quelldateinamen - Vorverarbeitung : Makro, Vorverarbeitungsanweisungen
- Variablen :
static
globale Variablen, Konvertierungen - Aufzähler
- Arithmetische Typen : Vorzeichenbehaftete vs. vorzeichenlose Integraltypen, Konvertierung von Integraltypen, Integraltypen: Größe und andere Probleme, Gleitkommatypen
- Funktionen : Funktionsparameter, Funktionsargumente, Funktionsrückgabewerte, Funktionsspezifizierer, Lambda-Ausdrücke
- Strukturen und Klassen :
struct
vs. class
, Initialisierung, geklammerte Initialisierungslisten, spezielle Mitgliedsfunktionen, =default
, =delete
, andere Probleme, Vererbung, Stil
15. Kodexkonventionen II
-
auto
- Vorlagen und Typabzug
- Kontrollfluss : Redundanter Kontrollfluss,
if/else
, Vergleich, switch
, for/while
- Namespace :
using namespace
Direktive, anonymer/unbenannter Namespace, Namespace- und Klassendesign, Stil - Moderne C++-Funktionen : Schlüsselwörter, Funktionen, Klasse, Bibliothek
- Wartbarkeit : Codeverständnis, Funktionen, Vorlage und Debuction, Bibliothek
- Portabilität
- Benennung : Entitäten, Variablen, Funktionen, Stilkonventionen, Durchsetzung von Benennungsstilen
- Lesbarkeit und Formatierung : Horizontaler Abstand, Zeiger/Referenzen, vertikaler Abstand, geschweifte Klammern, Typdekoratoren, Ausführlichkeit des Codes reduzieren, andere Probleme
- Codedokumentation : Funktionsdokumentation, Kommentarsyntax, Dateidokumentation
16. Debuggen und Testen
- Debugging-Übersicht
- Behauptungen
- Ausführungs-Debugging : Haltepunkte, Watchpoints/Catchpoints, Kontrollfluss, Stapel und Informationen, Drucken, Disassemblieren,
std::breakpoint
- Speicher-Debugging :
valgrind
- Härtungstechniken : Stack-Nutzung, Standardbibliotheksprüfungen, undefinierter Verhaltensschutz, Kontrollflussschutz
- Desinfektionsmittel : Adressdesinfektionsmittel, Leckdesinfektionsmittel, Speicherdesinfektionsmittel, Undefiniertes Verhaltensdesinfektionsmittel, Sampling-basiertes Desinfektionsmittel
- Debugging-Zusammenfassung
- Compiler-Warnungen
- Statische Analyse
- Codetests : Unit-Tests, Testgetriebene Entwicklung (TDD), Codeabdeckung, Fuzz-Tests
- Codequalität :
clang-tidy
17. Ökosystem – Cmake und andere Tools
- CMake :
cmake
und ctest
- Code-Dokumentation :
doxygen
- Codestatistik : Codezeilen zählen, zyklomatischer Komplexitätsanalysator
- Weitere Tools : Codeformatierung –
clang-format
, Compiler Explorer
, Codetransformation – CppInsights
, KI-gestützte Codevervollständigung – Lokale Codesuche – ugrep
, ripgrep
, hypergrep
, Codesuchmaschine – searchcode/grep.app
, Code-Benchmarking – Quick-Bench
, Schriftart zum Codieren
18. Dienstprogramme
- E/A-Stream : Manipulator,
ofstream/ifstream
- Strings :
std::string
, Konvertierung von/in numerische Werte, std::string_view
, std::format
, std::print
- Ansicht :
std::span
- Mathematikbibliotheken
- Zufallszahl : Grundkonzepte, C++
<random>
, Seed, PRNG-Periode und -Qualität, Verteilung, aktuelle Algorithmen und Leistung, Quasi-zufällig - Zeitmessung : Wanduhrzeit, Benutzerzeit, Systemzeit
- Standardklassenvorlagen :
std::pair
, std::tuple
, std::variant
, std::optional
, std::any
, std::stacktrace
- Dateisystembibliothek : Methoden abfragen, Methoden ändern
19. Container, Iteratoren und Algorithmen
- Container und Iteratoren
- Sequenzcontainer :
std::array
, std::vector
, std::deque
, std::list
, std::forward_list
- Assoziative Container :
std::set
, std::map
, std::multiset
- Containeradapter :
std::stack
, std::queue
, std::priority_queue
- Implementieren Sie einen benutzerdefinierten Iterator : Implementieren Sie einen einfachen Iterator
- Hinweise zum Iterator :
- Methoden des Iterator-Dienstprogramms :
std::advance
, std::next
, std::prev
, std::distance
, Containerzugriffsmethoden, Iteratormerkmale - Algorithmenbibliothek :
std::find_if
, std::sort
, std::accumulate
, std::generate
, std::remove_if
- C++20-Bereiche : Schlüsselkonzepte, Bereichsansicht, Bereichsadapter, Bereichsfabrik, Bereichsalgorithmen, Bereichsaktionen
20. Fortgeschrittene Themen I
- Move-Semantik :
lvalues
und rvalues
-Referenzen, Move-Semantik, std::move
, Klassendeklarationssemantik - Universelle Referenz und perfekte Weiterleitung : Universelle Referenz, Regeln zum Reduzieren von Referenzen, perfekte Weiterleitung
- Wertkategorien
-
&
, &&
Ref-Qualifizierer und volatile
Überladung - Elision und RVO kopieren
- Typabzug : Pass-by-Reference, Pass-by-Pointer, Pass-by-Value,
auto
Abzug, auto(x)
: Decay-Copy -
const
Korrektheit
21. Fortgeschrittene Themen II
- Undefiniertes Verhalten: Unzulässiges Verhalten, plattformspezifisches Verhalten, nicht spezifiziertes Verhalten, Erkennung undefinierten Verhaltens
- Fehlerbehandlung : Behebbare Fehlerbehandlung, Rückkehrcode, C++-Ausnahmen, Definieren benutzerdefinierter Ausnahmen, Schlüsselwort
noexcept
, Probleme bei der Speicherzuweisung, Rückkehrcode und Ausnahmezusammenfassung, std::expected
, Alternative Ansätze zur Fehlerbehandlung - Intelligente Zeiger :
std::unique_ptr
, std::shared_ptr
, std::weak_ptr
- Parallelität : Thread-Methoden, Mutex, Atomic, aufgabenbasierte Parallelität
22. Optimierung I – Grundkonzepte
- Einführung : Moores Gesetz, Grenzen des Mooreschen Gesetzes, Gründe für die Optimierung
- Grundkonzepte : Asymptotische Komplexität, Zeit-Speicher-Kompromiss, Entwicklungszyklus, Ahmdal-Gesetz, Durchsatz, Bandbreite, Latenz, Leistungsgrenzen, arithmetische Intensität
- Grundlegende Architekturkonzepte : Befehlsdurchsatz (IPC), In-Order- und Out-of-Order-Ausführung, Befehls-Pipelining, Parallelität auf Befehlsebene (ILP), Little-Gesetz, Parallelität auf Datenebene (DLP) und Vektorbefehle (SIMD), Thread-Level-Parallelität (TLP), Single Instruction Multiple Threads (SIMT), RISC- und CISC-Befehlssätze
- Speicherhierarchie : Speicherhierarchiekonzepte, Speicherlokalität, Kern-zu-Kern-Latenz und Thread-Affinität, Speicherordnungsmodell
23. Optimierung II – Codeoptimierung
- E/A-Operationen :
printf
, speicherzugeordnete E/A, beschleunigt das Laden von Rohdaten - Speicheroptimierungen : Heap-Speicher, Stapelspeicher, Cache-Nutzung, Datenausrichtung, Speicher-Prefetch
- Arithmetische Typen : Datentypen, arithmetische Operationen, Konvertierung, Gleitkomma, intrinsische Compilerfunktionen, Wert in einem Bereich, Nachschlagetabelle
- Kontrollfluss : Verzweigungen, Verzweigungshinweise –
[[likely]]
/ [[unlikely]]
, Ganzzahlen mit/ohne Vorzeichen, Schleifen, Schleifenanhebung, Schleifenabwicklung, Behauptungen, Compilerhinweise [[assume]]/std::unreacheable()
, Rekursion - Funktionen : Funktionsaufrufkosten, Argumentübergabe, Funktionsinlining, Funktionsattribute, Zeiger-Aliasing
- Objektorientierte Programmierung
- Standardbibliothek und andere Sprachaspekte
24. Optimierung III – Nicht-codierende Optimierungen und Benchmarking
- Compiler-Optimierungen : Über den Compiler, Compiler-Optimierungsflags, Gleitkomma-Optimierungsflags, Linker-Optimierungsflags, Architekturflags, Helfen Sie dem Compiler, besseren Code zu erstellen, Profilgeführte Optimierung (PGO), Nachbearbeitungs-Binäroptimierer, Polyedrische Optimierungen
- Compiler-Transformationstechniken : Grundlegende Transformationen, Loop-Unswitching, Loop-Fusion, Loop-Spaltung, Loop-Austausch, Loop-Kacheln
- Bibliotheken und Datenstrukturen
- Leistungsbenchmarking : Was soll getestet werden?, Workload-/Datensatzqualität, Cache-Verhalten, stabile CPU-Leistung, Überlegungen zu Multithreads, Programmspeicherlayout, Messaufwand, Compiler-Optimierungen, Metrikbewertung
- Profilierung :
gprof
, uftrace
, callgrind
, cachegrind
, perf
Linux-Profiler - Paralleles Rechnen : Parallelität vs. Parallelität, Leistungsskalierung, Gustafsons Gesetz, parallele Programmiersprachen
25. Softwaredesign I – Grundkonzepte (ENTWURF)
- Bücher und Referenzen
- Grundkonzepte : Abstraktion, Schnittstelle und Modul, Klasseninvariante
- Prinzipien des Software-Designs : Trennung von Belangen, geringe Kopplung, hohe Kohäsion, Kapselung und Ausblenden von Informationen, Design durch Vertrag, Problemzerlegung, Code-Wiederverwendung
- Softwarekomplexität : Softwareentropie, technische Schulden
- Die SOLID-Designprinzipien
- Klassendesign : Das Klassenschnittstellenprinzip, Mitgliedsfunktionen vs. freie Funktionen, Namespace-Funktionen vs. statische Klassenmethoden
- BLAS GEMM-Fallstudie
- Objekte und Ansichten besitzen
- Wert vs. Referenzsemantik
- Globale Variablen
26. Softwaredesign II – Designmuster und Redewendungen (ENTWURF)
- C++-Redewendungen : Nullregel, Dreierregel, Fünferregel
- Entwurfsmuster : Singleton, Zeiger auf Implementierung (PIMPL), Curiously Recurring Template Pattern (CRTP), virtuelle Vorlagenfunktionen
Roadmap
- Verbessern Sie die Kapitel zum Softwaredesign
- Kapitel „Build-Aspekte“ (z. B. Reduzierung der Build-Zeit)
Fehler melden? und beitragen
Wenn Sie Tippfehler, konzeptionelle Fehler oder verbesserungswürdige Abschnitte finden, melden Sie diese bitte über das issue
.
Autor
Federico Busato
, https://federico-busato.github.io/
- LinkedIn: www.linkedin.com/in/federico-busato/
- Twitter: twitter.com/fedebusato