std:: out_of_range
|
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
|
(since C++26) |
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) |
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
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:: logic_error
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>
)
|