std::out_of_range
| Definiert in der Header-Datei <stdexcept> |
||
| class out_of_range; |
||
Definiert einen Objekttyp, der als Ausnahme geworfen wird. Er meldet Fehler, die Folge des Versuchs sind, auf Elemente zuzugreifen, die sich außerhalb des definierten Bereichs befinden.
Es kann durch die Memberfunktionen von std::bitset und std::basic_string, durch die Funktionen der std::stoi und std::stod-Familien sowie durch die grenzgeprüften Member-Zugriffsfunktionen (z. B. std::vector::at und std::map::at) geworfen werden.
Vererbungdiagramm
Inhalt |
[edit] Memberfunktionen
| (Konstruktor) |
konstruiert ein neues out_of_range-Objekt mit der gegebenen Nachricht(öffentliche Memberfunktion) |
| operator= |
weist das out_of_range-Objekt zu(öffentliche Memberfunktion) |
std::out_of_range::out_of_range
| out_of_range( const std::string& what_arg ); |
(1) | |
| out_of_range( const char* what_arg ); |
(2) | |
| out_of_range( const out_of_range& other ); |
(3) | (noexcept seit C++11) |
std::out_of_range 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::out_of_range keine Ausnahmen auslösen darf, wird diese Nachricht typischerweise intern als separat zugeordneter, referenzgezählter String gespeichert. Dies ist auch der Grund, warum es keinen Konstruktor gibt, der std::string&& übernimmt: Der Inhalt müsste ohnehin 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::out_of_range::operator=
| out_of_range& operator=( const out_of_range& other ); |
(noexcept seit C++11) | |
Weist den Inhalt dem von other zu. Wenn *this und other beide den dynamischen Typ std::out_of_range 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) |
[edit] Hinweise
Die Standard-Fehlerbedingung std::errc::result_out_of_range weist typischerweise auf die Bedingung hin, dass das Ergebnis und nicht die Eingabe außerhalb des Bereichs liegt, und steht in engerem Zusammenhang mit std::range_error und ERANGE.
[edit] 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::out_of_range'sKopien waren implementierungsabhängig |
sie sind identisch mit der des ursprüngliches std::out_of_range-Objekt |
[edit] Siehe auch
| greift mit Grenzwertprüfung auf das angegebene Zeichen zu (public member function of std::basic_string<CharT,Traits,Allocator>) | |
| greift mit Grenzwertprüfung auf das angegebene Zeichen zu (public member function of std::basic_string_view<CharT,Traits>) | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function of std::deque<T,Allocator>) | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function of std::map<Key,T,Compare,Allocator>) | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function of std::unordered_map<Key,T,Hash,KeyEqual,Allocator>) | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function of std::vector<T,Allocator>) | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function of std::array<T,N>) | |
| (C++26) |
Greift mit Überprüfung auf ein bestimmtes Element zu (public member function of std::span<T,Extent>) |