Namespaces
Variants

std:: bad_optional_access

From cppreference.net
Utilities library
Défini dans l'en-tête <optional>
class bad_optional_access : public std:: exception
(depuis C++17)

Définit un type d'objet à lever par std::optional::value lors de l'accès à un objet optionnel qui ne contient pas de valeur.

Toutes les fonctions membres de std::bad_optional_access sont constexpr : il est possible de créer et d'utiliser des objets std::bad_optional_access dans l'évaluation d'une expression constante.

Cependant, les objets std::bad_optional_access ne peuvent généralement pas être constexpr , car tout stockage alloué dynamiquement doit être libéré dans la même évaluation d'expression constante.

(depuis C++26)
cpp/error/exception std-bad optional access-inheritance-lwg2806.svg

Diagramme d'héritage

Table des matières

Fonctions membres

(constructeur)
construit un nouvel objet bad_optional_access
(fonction membre publique)
operator=
remplace l'objet bad_optional_access
(fonction membre publique)
what
retourne la chaîne explicative
(fonction membre publique)

std::bad_optional_access:: bad_optional_access

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

Construit un nouvel objet bad_optional_access avec une chaîne d'octets terminée par un caractère nul définie par l'implémentation, accessible via what() .

1) Constructeur par défaut.
2) Constructeur de copie. Si * this et other ont tous deux le type dynamique std::bad_optional_access alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 .

Paramètres

other - un autre objet d'exception à copier

std::bad_optional_access:: operator=

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

Assigne le contenu avec celui de other . Si * this et other ont tous deux le type dynamique std::bad_optional_access alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 après l'assignation.

Paramètres

other - un autre objet d'exception à assigner

Valeur de retour

* this

std::bad_optional_access:: what

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

Retourne la chaîne explicative.

Valeur de retour

Pointeur vers une chaîne implémentation-définie terminée par un caractère nul contenant des informations explicatives. La chaîne est adaptée à la conversion et à l'affichage en tant que std::wstring . Le pointeur est garanti valide au moins jusqu'à la destruction de l'objet exception duquel il est obtenu, ou jusqu'à l'appel d'une fonction membre non-const (par exemple l'opérateur d'affectation par copie) sur l'objet exception.

La chaîne retournée est encodée avec l'encodage littéral ordinaire pendant l'évaluation constante.

(depuis C++26)

Notes

Les implémentations sont autorisées mais non requises à surcharger what() .

Hérité de std:: exception

Fonctions membres

[virtual]
détruit l'objet exception
(fonction membre publique virtuelle de std::exception )
[virtual]
retourne une chaîne explicative
(fonction membre publique virtuelle de std::exception )

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr std::bad_optional_access

Exemple

#include <iostream>
#include <optional>
int main()
{
    std::optional<int> opt; // crée un optional vide
    try
    {
        [[maybe_unused]] auto x = opt.value(); // lève une exception
    }
    catch (const std::bad_optional_access& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Sortie possible :

bad optional access

Voir aussi

exception indiquant un accès vérifié à un expected qui contient une valeur inattendue
(modèle de classe)
exception levée lors d'accès non valides à la valeur d'un variant
(classe)