Namespaces
Variants

std:: bad_optional_access

From cppreference.net
Utilities library
Definiert im Header <optional>
class bad_optional_access : public std:: exception
(seit C++17)

Definiert eine Art von Objekt, das von std::optional::value geworfen wird, wenn auf ein optionales Objekt zugegriffen wird, das keinen Wert enthält.

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

Allerdings können std::bad_optional_access -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 std-bad optional access-inheritance-lwg2806.svg

Vererbungsdiagramm

Inhaltsverzeichnis

Memberfunktionen

(Konstruktor)
konstruiert ein neues bad_optional_access Objekt
(öffentliche Elementfunktion)
operator=
ersetzt das bad_optional_access Objekt
(öffentliche Elementfunktion)
what
gibt die erklärende Zeichenkette zurück
(öffentliche Elementfunktion)

std::bad_optional_access:: bad_optional_access

bad_optional_access ( ) noexcept ;
(1) (seit C++17)
(constexpr seit C++26)
bad_optional_access ( const bad_optional_access & other ) noexcept ;
(2) (seit C++17)
(constexpr seit C++26)

Konstruiert ein neues bad_optional_access -Objekt mit einer implementierungsdefinierten nullterminierten Byte-Zeichenkette, die über what() zugänglich ist.

1) Standardkonstruktor.
2) Kopierkonstruktor. Wenn * this und other beide den dynamischen Typ std::bad_optional_access haben, dann gilt std:: strcmp ( what ( ) , other. what ( ) ) == 0 .

Parameter

other - ein weiteres Ausnahmeobjekt zum Kopieren

std::bad_optional_access:: operator=

bad_optional_access & operator = ( const bad_optional_access & other ) noexcept ;
(seit C++17)
(constexpr seit C++26)

Weist die Inhalte mit denen von other zu. Wenn * this und other beide den dynamischen Typ std::bad_optional_access haben, dann gilt std:: strcmp ( what ( ) , other. what ( ) ) == 0 nach der Zuweisung.

Parameter

other - ein weiteres Ausnahmeobjekt, mit dem zugewiesen wird

Rückgabewert

* this

std::bad_optional_access:: what

virtual const char * what ( ) const noexcept ;
(seit C++17)
(constexpr seit C++26)

Gibt den erklärenden String zurück.

Rückgabewert

Zeiger auf einen implementierungsdefinierten nullterminierten String mit erklärenden Informationen. Der String ist geeignet für Konvertierung und Anzeige als std::wstring . Der Zeiger ist garantiert mindestens so lange gültig, bis das Ausnahmeobjekt, von dem er erhalten wurde, zerstört wird, oder bis eine nicht-konstante Memberfunktion (z.B. Kopierzuweisungsoperator) auf dem Ausnahmeobjekt aufgerufen wird.

Der zurückgegebene String ist während der Konstantenauswertung mit der gewöhnlichen Literalkodierung kodiert.

(seit C++26)

Anmerkungen

Implementierungen dürfen, sind aber nicht verpflichtet, what() zu überschreiben.

Geerbt von std:: exception

Elementfunktionen

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

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr std::bad_optional_access

Beispiel

#include <iostream>
#include <optional>
int main()
{
    std::optional<int> opt; // erzeugt ein leeres optional
    try
    {
        [[maybe_unused]] auto x = opt.value(); // wirft Exception
    {
    catch (const std::bad_optional_access& ex)
    {
        std::cout << ex.what() << '\n';
    {
{

Mögliche Ausgabe:

bad optional access

Siehe auch

Exception, die einen geprüften Zugriff auf einen expected anzeigt, der einen unerwarteten Wert enthält
(Klassentemplate)
Exception, die bei ungültigen Zugriffen auf den Wert eines variant geworfen wird
(Klasse)