C++-Programmierung/ Ausnahmebehandlung/ Die Standard-Fehlerklassen
C++-Standard-Fehlerklassen
[Bearbeiten]Der C++-Standardheader <stdexcept>
stellt die Basisklasse std::exception
und zwei Kategorien von Exceptions bereit: logische Fehler und Laufzeitfehler. Die Basisklasse, um Logik-Fehlerklassen zu melden, ist std::logic_error
, für Laufzeitfehler ist das std::runtime_error
. Eine genauere Übersicht gibt es auf Websites wie cppreference.com oder cplusplus.com (beide englischsprachig).
std::exception
[Bearbeiten]std::exception
ist die Basisklasse für Ausnahmen. Die wichtigste (virtuelle) Methode ist what()
, die ein C-Stil-String (einen Pointer auf ein char) zurück gibt und für die Fehlerdiagnose wichtig ist. Sonst hat diese Klasse eine minimale Schnittstelle: Neben dem Standardkonstruktor gibt es einen Copy-Konstruktor, einen virtuellen Destruktor und einen Zuweisungsoperator.
Laufzeit-Fehlerklassen
[Bearbeiten]std::exception
: Basisklasse für alle Exceptions
std::runtime_error
: Basisklasse für Laufzeitfehler
std::range_error
: signalisiert Bereichsfehler bei internen Berechnungenstd::overflow_error
: signalisiert arithmetische Bereichsüberschreitungenstd::underflow_error
: signalisiert arithmetische Bereichsunterschreitungenstd::system_error
ab C++11, Standardheader<system_error>
, signalisiert Fehler vom Betriebssystem oder anderen Low-Level-Anwendungen, hat zusätzlich eine Methodecode()
, um an dasstd::system_error::code
-Objekt zu gelangen[1]:
Logik-Fehlerklassen
[Bearbeiten]Es gibt eine Reihe von speziellen std::logic_error
-Klassen. Diese werden bei Fehlern vor der Programmausführung geworfen.
std::exception
: Basisklasse für alle Exceptions
std::logic_error
: Basisklasse, um logische Fehler (Verletzung von Vorbedingungen, etc.)
std::domain_error
: für Bereichsfehlerstd::invalid_argument
: kennzeichnet ungültige Argumentestd::length_error
: für Längenfehlerstd::out_of_range
: wird geworfen, wenn ein Zugriff außerhalb eines gültigen Bereichs statt findet, z. B. beistd::vector
:v.at(v.size() + 1);
std::future_error
: ab C++11, Standardheader<future>
, signalisiert Zugriffsfehler aufstd::future
-Objekte[2]