C++-Programmierung/ Ausnahmebehandlung/ Die Standard-Fehlerklassen

Aus Wikibooks
Zur Navigation springen Zur Suche springen

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 Berechnungen
  • std::overflow_error: signalisiert arithmetische Bereichsüberschreitungen
  • std::underflow_error: signalisiert arithmetische Bereichsunterschreitungen
  • std::system_error ab C++11, Standardheader <system_error>, signalisiert Fehler vom Betriebssystem oder anderen Low-Level-Anwendungen, hat zusätzlich eine Methode code(), um an das std::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 Bereichsfehler
  • std::invalid_argument: kennzeichnet ungültige Argumente
  • std::length_error: für Längenfehler
  • std::out_of_range: wird geworfen, wenn ein Zugriff außerhalb eines gültigen Bereichs statt findet, z. B. bei std::vector: v.at(v.size() + 1);
  • std::future_error: ab C++11, Standardheader <future>, signalisiert Zugriffsfehler auf std::future-Objekte[2]