Namespaces
Variants

std:: out_of_range

From cppreference.net
Definiert im Header <stdexcept>
class out_of_range ;

Definiert eine Art von Objekt, das als Ausnahme geworfen wird. Es meldet Fehler, die die Folge eines Versuchs sind, auf Elemente außerhalb des definierten Bereichs zuzugreifen.

Es kann von den Memberfunktionen von std::bitset und std::basic_string geworfen werden, von den std::stoi und std::stod Funktionsfamilien, sowie von den grenzgeprüften Member-Zugriffsfunktionen (z.B. std::vector::at und std::map::at ).

Alle Memberfunktionen von std::out_of_range sind constexpr : Es ist möglich, std::out_of_range -Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::out_of_range -Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.

(since C++26)
cpp/error/exception cpp/error/logic error std-out of range-inheritance.svg

Vererbungsdiagramm

Inhaltsverzeichnis

Memberfunktionen

(Konstruktor)
konstruiert ein neues out_of_range Objekt mit der angegebenen Nachricht
(öffentliche Member-Funktion)
operator=
ersetzt das out_of_range Objekt
(öffentliche Member-Funktion)

std::out_of_range:: out_of_range

out_of_range ( const std:: string & what_arg ) ;
(1) (constexpr seit C++26)
out_of_range ( const char * what_arg ) ;
(2) (constexpr seit C++26)
out_of_range ( const out_of_range & other ) ;
(3) (noexcept seit C++11)
(constexpr seit C++26)
1) Konstruiert das Ausnahmeobjekt mit what_arg als erklärendem String. Nach der Konstruktion gilt std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 .
2) Konstruiert das Ausnahmeobjekt mit what_arg als erklärendem String. Nach der Konstruktion gilt std:: strcmp ( what ( ) , what_arg ) == 0 .
3) Kopierkonstruktor. Wenn * this und other beide den dynamischen Typ std::out_of_range haben, dann gilt std:: strcmp ( what ( ) , other. what ( ) ) == 0 . Vom Kopierkonstruktor können keine Ausnahmen geworfen werden.

Parameter

what_arg - erklärender String
other - ein weiteres Ausnahmeobjekt zum Kopieren

Ausnahmen

1,2) Kann std::bad_alloc werfen.

Anmerkungen

Da das Kopieren von std::out_of_range keine Ausnahmen werfen darf, wird diese Nachricht typischerweise intern als separat allokierter referenzgezählter String gespeichert. Dies ist auch der Grund, warum es keinen Konstruktor gibt, der std::string&& akzeptiert: Der Inhalt müsste ohnehin kopiert werden.

Vor der Lösung von LWG Issue 254 konnte der Nicht-Kopier-Konstruktor nur std::string akzeptieren. Dies machte dynamische Allokation zwingend erforderlich, um ein std::string -Objekt zu konstruieren.

Nach der Lösung von LWG Issue 471 muss eine abgeleitete Standard-Ausnahmeklasse einen öffentlich zugänglichen Kopierkonstruktor haben. Er kann implizit definiert werden, solange die durch what() erhaltenen erklärenden Strings für das ursprüngliche Objekt und das kopierte Objekt identisch sind.

std::out_of_range:: operator=

out_of_range & operator = ( const out_of_range & other ) ;
(noexcept seit C++11)
(constexpr seit C++26)

Weist die Inhalte mit denen von other zu. Wenn * this und other beide den dynamischen Typ std::out_of_range haben, dann gilt std:: strcmp ( what ( ) , other. what ( ) ) == 0 nach der Zuweisung. Vom Kopierzuweisungsoperator können keine Ausnahmen ausgelöst werden.

Parameter

other - ein weiteres Ausnahmeobjekt zum Zuweisen

Rückgabewert

* this

Anmerkungen

Nach der Lösung von LWG Issue 471 muss eine abgeleitete Standardausnahmeklasse einen öffentlich zugänglichen Kopierzuweisungsoperator besitzen. Dieser kann implizit definiert werden, solange die erklärenden Zeichenketten, die durch what() erhalten werden, für das ursprüngliche Objekt und das kopierte Objekt identisch sind.

Geerbt von std:: exception

Elementfunktionen

[virtual]
zerstört das Exception-Objekt
(virtuelle öffentliche Elementfunktion von std::exception )
[virtual]
gibt einen erläuternden String zurück
(virtuelle öffentliche Elementfunktion von std::exception )

Hinweise

Der Standard-Fehlerzustand std::errc::result_out_of_range zeigt typischerweise den Zustand an, bei dem das Ergebnis und nicht die Eingabe außerhalb des gültigen Bereichs liegt, und steht in engerer Beziehung zu std::range_error und ERANGE .

Feature-Test Makro Wert Std Feature
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr Ausnahmetypen

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 254 C++98 der Konstruktor mit const char * fehlte hinzugefügt
LWG 471 C++98 die Erklärungstexte der Kopien von std::out_of_range
waren implementierungsdefiniert
sie sind identisch mit denen des
ursprünglichen std::out_of_range -Objekts

Siehe auch

greift auf das angegebene Zeichen mit Grenzprüfung zu
(öffentliche Elementfunktion von std::basic_string<CharT,Traits,Allocator> )
greift auf das angegebene Zeichen mit Grenzprüfung zu
(öffentliche Elementfunktion von std::basic_string_view<CharT,Traits> )
greift auf das angegebene Element mit Grenzprüfung zu
(öffentliche Elementfunktion von std::deque<T,Allocator> )
greift auf das angegebene Element mit Grenzprüfung zu
(öffentliche Elementfunktion von std::map<Key,T,Compare,Allocator> )
greift auf das angegebene Element mit Grenzprüfung zu
(öffentliche Elementfunktion von std::unordered_map<Key,T,Hash,KeyEqual,Allocator> )
greift auf das angegebene Element mit Grenzprüfung zu
(öffentliche Elementfunktion von std::vector<T,Allocator> )
greift auf das angegebene Element mit Grenzprüfung zu
(öffentliche Elementfunktion von std::array<T,N> )
(C++26)
greift auf das angegebene Element mit Grenzprüfung zu
(öffentliche Elementfunktion von std::span<T,Extent> )