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