Namespaces
Variants

std:: bad_optional_access

From cppreference.net
Utilities library
Definido en el encabezado <optional>
class bad_optional_access : public std:: exception
(desde C++17)

Define un tipo de objeto que será lanzado por std::optional::value cuando se accede a un objeto opcional que no contiene un valor.

Todas las funciones miembro de std::bad_optional_access son constexpr : es posible crear y utilizar objetos std::bad_optional_access en la evaluación de una expresión constante.

Sin embargo, los objetos std::bad_optional_access generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

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

Diagrama de herencia

Contenidos

Funciones miembro

(constructor)
construye un nuevo objeto bad_optional_access
(función miembro pública)
operator=
reemplaza el objeto bad_optional_access
(función miembro pública)
what
devuelve la cadena explicativa
(función miembro pública)

std::bad_optional_access:: bad_optional_access

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

Construye un nuevo objeto bad_optional_access con una cadena de bytes terminada en nulo definida por la implementación que es accesible a través de what() .

1) Constructor por defecto.
2) Constructor de copia. Si * this y other tienen ambos el tipo dinámico std::bad_optional_access entonces std:: strcmp ( what ( ) , other. what ( ) ) == 0 .

Parámetros

other - otro objeto de excepción a copiar

std::bad_optional_access:: operator=

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

Asigna los contenidos con los de other . Si * this y other ambos tienen tipo dinámico std::bad_optional_access entonces std:: strcmp ( what ( ) , other. what ( ) ) == 0 después de la asignación.

Parámetros

other - otro objeto de excepción con el cual asignar

Valor de retorno

* this

std::bad_optional_access:: what

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

Devuelve la cadena explicativa.

Valor de retorno

Puntero a una cadena terminada en nulo definida por la implementación con información explicativa. La cadena es adecuada para conversión y visualización como std::wstring . Se garantiza que el puntero será válido al menos hasta que se destruya el objeto de excepción del cual se obtiene, o hasta que se llame a una función miembro no constante (por ejemplo, el operador de asignación de copia) en el objeto de excepción.

La cadena devuelta está codificada con la codificación literal ordinaria durante la evaluación constante.

(desde C++26)

Notas

Se permite a las implementaciones, pero no se requiere, sobrescribir what() .

Heredado de std:: exception

Funciones miembro

[virtual]
destruye el objeto de excepción
(función miembro pública virtual de std::exception )
[virtual]
devuelve una cadena explicativa
(función miembro pública virtual de std::exception )

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr std::bad_optional_access

Ejemplo

#include <iostream>
#include <optional>
int main()
{
    std::optional<int> opt; // crea un optional vacío
    try
    {
        [[maybe_unused]] auto x = opt.value(); // lanza excepción
    {
    catch (const std::bad_optional_access& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Salida posible:

bad optional access

Véase también

excepción que indica acceso verificado a un expected que contiene un valor inesperado
(plantilla de clase)
excepción lanzada en accesos inválidos al valor de un variant
(clase)