Namensräume
Varianten
Aktionen

std::runtime_error

Von cppreference.com
< cpp‎ | 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.

cpp/error/exceptionstd-runtime error-inheritance.svg

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)
1) Konstruiert das Ausnahmeobjekt mit what_arg als erklärende Zeichenkette. Nach der Konstruktion gilt std::strcmp(what(), what_arg.c_str()) == 0.
2) Konstruiert das Ausnahmeobjekt mit what_arg als erklärende Zeichenkette. Nach der Konstruktion gilt std::strcmp(what(), what_arg) == 0.
3) Kopierkonstruktor. Wenn *this und other beide den dynamischen Typ 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

1,2) Kann std::bad_alloc auslösen.

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) [bearbeiten]
[virtuell]
gibt einen erklärenden String zurück
(virtuelle öffentliche Memberfunktion von std::exception) [bearbeiten]

[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_error
Kopien waren implementierungsabhängig
sie sind identisch mit der des
ursprünglichen std::runtime_error-Objekts