std::length_error
| Definiert in der Header-Datei <stdexcept> |
||
| class length_error; |
||
Definiert einen Objekttyp, der als Ausnahme geworfen wird. Sie meldet Fehler, die aus Versuchen resultieren, implementierungsdefinierte Längenbeschränkungen für ein Objekt zu überschreiten.
Diese Ausnahme wird von den Memberfunktionen von std::basic_string und std::vector::reserve geworfen.
Vererbungdiagramm
Inhalt |
[bearbeiten] Memberfunktionen
| (Konstruktor) |
konstruiert ein neues length_error-Objekt mit der gegebenen Nachricht(öffentliche Memberfunktion) |
| operator= |
ersetzt das length_error-Objekt(öffentliche Memberfunktion) |
std::length_error::length_error
| length_error( const std::string& what_arg ); |
(1) | |
| length_error( const char* what_arg ); |
(2) | |
| length_error( const length_error& other ); |
(3) | (noexcept seit C++11) |
std::length_error haben, dann ist std::strcmp(what(), other.what()) == 0. Aus dem 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::length_error keine Ausnahmen auslösen darf, wird diese Nachricht typischerweise intern als separat allozierter, referenzgezählter String gespeichert. Dies ist auch der Grund, warum es keinen Konstruktor gibt, der std::string&& entgegennimmt: 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::length_error::operator=
| length_error& operator=( const length_error& other ); |
(noexcept seit C++11) | |
Weist den Inhalt dem von other zu. Wenn *this und other beide den dynamischen Typ std::length_error haben, dann ist std::strcmp(what(), other.what()) == 0 nach der Zuweisung. Aus dem 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.
Abgeleitet von std::logic_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] 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::length_errorKopien waren implementierungsabhängig |
sie sind identisch mit der des ursprüngliches std::length_error-Objekt |
[bearbeiten] Siehe auch
| ändert die Anzahl der gespeicherten Zeichen (public member function of std::basic_string<CharT,Traits,Allocator>) |