std::underflow_error
| Definiert in der Header-Datei <stdexcept> |
||
| class underflow_error; |
||
Definiert einen Objekttyp, der als Ausnahme geworfen wird. Er kann verwendet werden, um Fehler bei arithmetischem Unterlauf zu melden (d. h. Situationen, in denen das Ergebnis einer Berechnung ein subnormaler Gleitkommawert ist).
Die Standardbibliothekskomponenten werfen diese Ausnahme nicht (mathematische Funktionen melden Unterlauffehler wie in math_errhandling angegeben). Drittanbieterbibliotheken verwenden dies jedoch. Zum Beispiel wirft boost.math std::underflow_error, wenn boost::math::policies::throw_on_error aktiviert ist (Standardeinstellung).
Vererbungdiagramm
Inhalt |
[bearbeiten] Member functions
| (Konstruktor) |
konstruiert ein neues underflow_error-Objekt mit der gegebenen Nachricht(öffentliche Memberfunktion) |
| operator= |
ersetzt das underflow_error-Objekt(öffentliche Memberfunktion) |
std::underflow_error::underflow_error
| underflow_error( const std::string& what_arg ); |
(1) | |
| underflow_error( const char* what_arg ); |
(2) | |
| underflow_error( const underflow_error& other ); |
(3) | (noexcept seit C++11) |
std::underflow_error haben, dann ist std::strcmp(what(), other.what()) == 0. Vom Kopierkonstruktor kann keine Ausnahme geworfen werden.Parameter
| what_arg | - | erklärende Zeichenkette |
| Sonstiges | - | ein anderes Ausnahmeobjekt zum Kopieren |
Ausnahmen
Anmerkungen
Da das Kopieren von std::underflow_error keine Ausnahmen werfen darf, wird diese Nachricht typischerweise intern als separat zugewiesener referenzzählender String gespeichert. Aus diesem Grund gibt es auch keinen Konstruktor, der std::string&& akzeptiert: Der Inhalt müsste sowieso kopiert werden.
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::underflow_error::operator=
| underflow_error& operator=( const underflow_error& other ); |
(noexcept seit C++11) | |
Weist den Inhalt dem von other zu. Wenn *this und other beide den dynamischen Typ std::underflow_error haben, dann ist std::strcmp(what(), other.what()) == 0 nach der Zuweisung. Vom Kopierzuweisungsoperator kann keine Ausnahme geworfen 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.
Geerbt von std::runtime_error
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] Defect reports
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 Strings von std::underflow_errorKopien waren implementierungsabhängig |
sie sind identisch mit der des ursprüngliches std::underflow_error-Objekt |