Namensräume
Varianten
Aktionen

std::length_error

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

cpp/error/exceptioncpp/error/logic errorstd-length error-inheritance.svg

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)
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::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

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

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) [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::length_error
Kopien 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>) [bearbeiten]