Ich habe mir das Buch “Eine Tour durch C++” (2023) von Bjarne Stroustrup gekauft und werde hier ein paar Extrakte aus dem Buch als Nachschlagewerk zusammenstellen, um die leicht auffindbar zu haben.
Referenz
Als gutes Nachschlagewerk hat sich die folgende Internetseite etabliert: CPLUSPLUS.COM. Insbesondere ist hier die Standard Template Library sehr gut beschrieben und wird hier auch immer aktuell gehalten.
Neue Schlüsselwörter und deren Bedeutung
Kategorie | Schlüsselwort | Erläuterung |
---|---|---|
Konstanten | const | Konstante, die zur Laufzeit zugewiesen werden kann. Muss nicht bereits zur Compile-Zeit feststehen. |
Konstanten | constexpr | NEU !! Diese Konstante muß bereits beim Kompilieren feststehen Sie kann nicht erst zur Laufzeit berechnet werden. |
Konstanten | constexpr | NEU !! Wenn der return-Wert einer Funktion einer const -Konstante zugewiesen werden soll.Beispiel: constexpr u32 Funktionsname(...) {...} |
Konstanten | consteval | NEU !! Wenn der return-Wert einer Funktion einer constexpr Konstante zugewiesen werden soll, also bereits zur Compile-Zeit feststehen muß.Beispiel: consteval u32 Funktionsname(...) {...} |
Deklaration | auto | NEU !! Automatisiert die Zuweisung des richtigen Variablentypes. Beispiel: auto ObjectInst_o = Object_o; Die Variable ObjectInst_o bekommt automatisch den richtigen Typ zugewiesen, nämlich den von Object_o. |
Referenz | u32 &a = b | a ist nur ein anderer Name von b . Es wird keine Kopie von b angelegt und a zugewiesen, d.h. a ist b . Es wird auf dieselbe Speicherstelle verwiesen, ohne ein Pointer zu sein. |
for -Schleife | for(u32 x : v) {...} | Durchläuft eine Schleife ‘für alle x -Vorkommen in v . v könnte dann zum Beispiel ein Array sein oder ein Vector oder …. |
Nullpointer | nullptr | Weist einem Pointer ein Nullpointer-Wert zu. Beispiel: u32 *ZeigerAufU32_pu32 = nullptr; |
Enumeratoren | enum class Color_e { red, blue, green } | NEU !! Spezieller enumerator Typ, die class nach dem enum zeigt an, dass eine Aufzählung stark typisiert ist und daher nur mit diesem enemerator Typ benutzt werden kann. |
Module | export module Name | NEU !! Mit dem Schlüsselwort export module definiert man ein Modul mit dem entsprechenden Namen dahinter. Alles was nach außen hin bekannt sein soll, muß ebenfalls mit export sichtbar gemacht werden. Alles was nicht exportiert wird, ist nachher beim import unbekannt. |
Module | import Name | NEU !! Hier wird ein Modul importiert und alle im Modul mit export bekannt gemachten Definitionen importiert. Beispiel: import std importiert die gesamte Standard-Template-Bibliothek als Modul (sollte man immer so machen). |
Namensräume | namespace Bezeichnung { … } | Deklariert einen neuen Namensbereich Bezeichnung. Auf den Namensraum kann mit den Schlüsselwort using zugegriffen werden. |
Namensräume | using Bezeichnung | Eine using -Deklaration macht einen Namen aus einem Namensraum benutzbar.Beispiel: using Namensraum::Funktion; macht die Funktion Funktion aus dem Namensraum lokal verfügbar. |
Namensraum | using namespace Bezeichnung | Macht alle Namen im Namensraum Bezeichnung verfügbar. Man spart sich Schreibarbeit. Beispiel: using namespace std macht alle Namen im Standardbibliotheksraum verfügbar. Man spart sich dadurch die wiederholten std:: -Qualifikationen für jedem Namen der Standardbibliothek. |
Fehlerbehandlung | try { code } catch (const err_type &err_t) { Err_handling } | Tritt zur Laufzeit im Code des try -Blocks ein Fehler auf, dann wird sofort der catch -Block ausgeführt. Dem Catch-Block wird eine Referenz mitgegeben, der den Fehlertyp genauer beschreibt. Der Fehlertyp kann dann im Error-Handling ausgegeben werden. Es kann mehrere catch -Blöcke geben für verschiedene Fehlertypen. |
Fehlerbehandlung | throw err_hndl("Text"); | throw wirft direkt einen Fehler und die entsprechende Fehlerausgabe. |
Fehlerbehandlung | assert(Bedingung); | Wenn die Bedingung eines assert() im Debug-Modus scheitert, wird das Programm beendet. Ist man nicht Debug-Modus wird nicht geprüft. |
Fehlerbehandlung | static_assert(Bedingung, "Text"); | static_assert() findet Fehler bereits beim komilieren. |
Fehlerbehandlung | void Funktion() noexcept { ... } | noexcept kann benutzt werden um vorzugeben, dass eine Funktion niemals eine Exception werfen soll. Sollte doch ein Fehler auftreten, wird stattdessen das Programm beendet. |
Smart-Pointer | unique_ptr<type> PointerName_p; | … definiert einen Pointer PointerName_p des Typs type. Beispiel: unique_ptr<int> IntegerVar_pui; |
Konstruktor | class Klasse_c | Explizite Verwendung des Kopierkonstruktors durch Verwendung von default . Andere Standardimplementierungen sind dadurch nicht mehr möglich (z.B. Move-Konstruktor). |
Konstruktor | class Klasse_c | Die Verwendung von delete verbietet die Verwendung eines bestimmten Konstruktors. Im Beispiel links ist die Verwendung des Kopierkonstruktors nicht mehr möglich. |
Konstruktor | class Klasse_c | Die Verwendung von explicit erlaubt ausschließlich nur die Verwendung dieses Konstruktors. Andere Konstruktoren werden nicht mehr implizit verwendet. |
C++