0 Tage Serie
Code-Bibliothek

C++ für Fortgeschrittene

Lies diese C++-Snippets für Fortgeschrittene Zeile für Zeile — jedes kommt mit einer Erklärung, was der Code tut und warum.

C++ · Mittel

RAII und Ausnahmesicherheit

Resource Acquisition Is Initialization (RAII) ist ein zentrales C++-Konzept. Ressourcen sind an die Lebensdauer von Objekten gebunden; sie werden im Konstruktor angefordert und im Destruktor freige…

Memory ManagementBest Practices
Snippet öffnen →
C++ · Mittel

Virtuelle Destruktoren bei Vererbung

Wenn man in C++ ein Objekt einer abgeleiteten Klasse über einen Basisklassen-Zeiger löscht, ist das Verhalten undefiniert, sofern die Basisklasse keinen virtuellen Destruktor hat. Das Schlüsselwort…

OOPMemory Management
Snippet öffnen →
C++ · Mittel

Move-Semantik mit std::move

Die Move-Semantik ermöglicht es, Ressourcen (wie Heap-Speicher) von einem Objekt auf ein anderes zu übertragen, anstatt sie zu kopieren. std::move wandelt ein Objekt in einen R-Value um, sodass der…

PerformanceMemory Management
Snippet öffnen →
C++ · Mittel

Smart Pointer: std::unique_ptr

std::unique_ptr ist ein intelligenter Zeiger, der ein anderes Objekt besitzt und verwaltet und dieses Objekt löscht, sobald der unique_ptr den Gültigkeitsbereich verlässt. Er kann nicht kopiert, so…

Memory ManagementBest Practices
Snippet öffnen →
C++ · Mittel

Lambda-Ausdrücke und Capturing

Lambdas sind anonyme Funktionen, die inline definiert werden können. Die Capture-Klausel '[]' ermöglicht es dem Lambda, auf Variablen aus dem umgebenden Bereich zuzugreifen, entweder als Kopie oder…

FunktionenSyntax
Snippet öffnen →
C++ · Mittel

Statische Klassenelemente

Statische Elemente werden von allen Instanzen einer Klasse gemeinsam genutzt. Es gibt nur eine Kopie eines statischen Elements, unabhängig davon, wie viele Objekte erstellt werden.

OOPMemory Management
Snippet öffnen →
C++ · Mittel

Template-Spezialisierung

Die Template-Spezialisierung ermöglicht es Ihnen, eine benutzerdefinierte Implementierung eines Templates für einen bestimmten Datentyp zu definieren und so die generische Version zu überschreiben.

SyntaxPerformance
Snippet öffnen →
C++ · Mittel

Operatorüberladung

Die Operatorüberladung ermöglicht es Ihnen, das Verhalten von Standardoperatoren wie + oder - bei der Verwendung mit Ihren eigenen Klassen neu zu definieren.

OOPFunktionen
Snippet öffnen →
C++ · Mittel

Elementinitialisierungslisten

Elementinitialisierungslisten werden in Konstruktoren verwendet, um Klassenelemente zu initialisieren, bevor der Konstruktorrumpf ausgeführt wird, was effizienter ist als eine Zuweisung.

PerformanceBest Practices
Snippet öffnen →
C++ · Mittel

Das 'mutable'-Schlüsselwort

Das Schlüsselwort mutable erlaubt es, ein bestimmtes Element einer Klasse zu ändern, selbst wenn auf das Objekt über eine const-Referenz oder innerhalb einer const-Memberfunktion zugegriffen wird.

OOPSyntax
Snippet öffnen →
C++ · Mittel

Initialisierungen in Auswahl-Anweisungen

C++17 führte die Möglichkeit ein, eine Variable direkt innerhalb der Bedingung einer 'if'- oder 'switch'-Anweisung zu initialisieren. Dies beschränkt den Gültigkeitsbereich der Variablen auf den Bl…

KontrollstrukturenSyntax
Snippet öffnen →
C++ · Mittel

Logik-Verzweigungen zur Kompilierzeit

Die 'if constexpr'-Anweisung ermöglicht bedingte Kompilierung. Zweige, die die Bedingung nicht erfüllen, werden vom Compiler nicht instanziiert. Dies ist äußerst nützlich für die Template-Metaprogr…

KontrollstrukturenPerformance
Snippet öffnen →
C++ · Mittel

Sichere Grenzwertvalidierung in Sammlungen

Während der Subskript-Operator [] schnell ist, führt er keine Grenzwertprüfung durch, was bei ungültigen Indizes zu undefiniertem Verhalten führt. Die von Standard-Containern bereitgestellte at()-M…

Arrays & ListenMemory Management
Snippet öffnen →
C++ · Mittel

Iteration mit nachgestellter Bedingung

Die do-while-Schleife garantiert mindestens eine Ausführung des Codeblocks, da die Bedingung erst nach dem Rumpf ausgewertet wird. Dies ist nützlich für Aufgaben wie die Eingabevalidierung, bei den…

KontrollstrukturenSyntax
Snippet öffnen →
C++ · Mittel

Moderne Container-Arrays

Im Gegensatz zu rohen C-Arrays ist std::array ein Container, der seine eigene Größe kennt und nicht automatisch in einen Pointer zerfällt. Es bietet eine robustere Methode zum Umgang mit Sammlungen…

Arrays & ListenBest Practices
Snippet öffnen →
C++ · Mittel

Explizite verengende Konvertierungen

Die Verwendung von static_cast für die Typumwandlung wird gegenüber C-Style-Casts bevorzugt, da es im Code besser sichtbar ist und vom Compiler geprüft wird. Es signalisiert anderen Entwicklern, da…

DatentypenSyntax
Snippet öffnen →
C++ · Mittel

Beabsichtigter Switch-Durchlauf

Ein Switch-Fallthrough tritt auf, wenn ein Case nicht mit einem Break endet. Obwohl dies oft ein Bug ist, kann es für hierarchische Logik nützlich sein. Das Attribut [[fallthrough]] teilt dem Compi…

KontrollstrukturenBest Practices
Snippet öffnen →
C++ · Mittel

Zweidimensionale Daten-Initialisierung

Mehrdimensionale Arrays werden im Speicher zeilenweise (row-major order) abgelegt. Die Initialisierung mit geschachtelten Klammern verbessert die Code-Klarheit, indem die Daten visuell auf ihre log…

Arrays & ListenDatentypen
Snippet öffnen →