std::runtime_error
| Definiert in der Header-Datei <stdexcept> |
||
| class runtime_error; |
||
Definiert einen Typ von Objekten, die als Ausnahme ausgelöst werden. Er meldet Fehler, die auf Ereignisse außerhalb des Programmbereichs zurückzuführen sind und nicht leicht vorhersehbar sind.
Vererbungdiagramm
Ausnahmen vom Typ std::runtime_error werden von den folgenden Standardbibliothekskomponenten ausgelöst
| (seit C++20) |
Zusätzlich sind die folgenden Standard-Ausnahmetypen von std::runtime_error abgeleitet
| (seit C++11) |
| (seit C++17) |
| (seit C++20) |
Inhalt |
[bearbeiten] Memberfunktionen
| (Konstruktor) |
konstruiert ein neues runtime_error-Objekt mit der angegebenen Nachricht(öffentliche Memberfunktion) |
| operator= |
ersetzt das runtime_error-Objekt(öffentliche Memberfunktion) |
std::runtime_error::runtime_error
| runtime_error( const std::string& what_arg ); |
(1) | |
| runtime_error( const char* what_arg ); |
(2) | |
| runtime_error( const runtime_error& other ); |
(3) | (noexcept seit C++11) |
std::runtime_error haben, dann gilt std::strcmp(what(), other.what()) == 0. Vom Kopierkonstruktor kann keine Ausnahme ausgelöst werden.Parameter
| what_arg | - | erklärende Zeichenkette |
| Sonstiges | - | ein anderes Ausnahmeobjekt zum Kopieren |
Ausnahmen
Anmerkungen
Da das Kopieren von std::runtime_error keine Ausnahmen auslösen darf, wird diese Nachricht typischerweise intern als separat zugewiesene, referenzgezählte Zeichenkette gespeichert. Dies ist auch der Grund, warum es keinen Konstruktor gibt, der std::string&& akzeptiert: er müsste den Inhalt ohnehin kopieren.
Vor der Auflösung von LWG-Problem 254 konnte der Nicht-Kopierkonstruktor nur std::string akzeptieren. Dies machte die dynamische Speicherzuweisung zur obligatorischen Erstellung eines std::string-Objekts.
Nach der Auflösung von LWG-Problem 471 muss eine abgeleitete Standard-Ausnahmeklasse einen öffentlich zugänglichen Kopierkonstruktor haben. Dieser kann implizit definiert werden, solange die durch what() erhaltenen erklärenden Zeichenketten für das ursprüngliche und das kopierte Objekt gleich sind.
std::runtime_error::operator=
| runtime_error& operator=( const runtime_error& other ); |
(noexcept seit C++11) | |
Weist den Inhalt mit dem von other zu. Wenn *this und other beide den dynamischen Typ std::runtime_error haben, dann gilt std::strcmp(what(), other.what()) == 0 nach der Zuweisung. Vom Kopierzuweisungsoperator kann keine Ausnahme ausgelöst werden.
Parameter
| Sonstiges | - | ein anderes Ausnahmeobjekt zum Zuweisen |
Rückgabewert
*this
Anmerkungen
Nach der Auflösung von LWG-Problem 471 muss eine abgeleitete Standard-Ausnahmeklasse einen öffentlich zugänglichen Kopierzuweisungsoperator haben. Dieser kann implizit definiert werden, solange die durch what() erhaltenen erklärenden Zeichenketten für das ursprüngliche und das zugewiesene Objekt gleich sind.
Abgeleitet von std::exception
Memberfunktionen
| [virtuell] |
zerstört das Ausnahmeobjekt (virtuelle öffentliche Memberfunktion von std::exception) |
| [virtuell] |
gibt einen erklärenden String zurück (virtuelle öffentliche Memberfunktion von std::exception) |
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 254 | C++98 | Der Konstruktor, der const char* akzeptiert, fehlte | hinzugefügt |
| LWG 471 | C++98 | die erklärenden Zeichenketten von std::runtime_errorKopien waren implementierungsabhängig |
sie sind identisch mit der des ursprünglichen std::runtime_error-Objekts |