Namespaces
Variants

std::bad_typeid

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
Soporte de tipos
Tipos básicos
Tipos de enteros de ancho fijo (C++11)
Tipos de punto flotante de ancho fijo (C++23)
(C++11)    
(C++17)
Límites numéricos
Interfaz de límites numéricos de C
Información de tipo en tiempo de ejecución
 
Definido en el encabezado <typeinfo>
class bad_typeid : public std::exception;

Se lanza una excepción de este tipo cuando se aplica el operador typeid a un valor de puntero nulo desreferenciado de un tipo polimórfico.

cpp/error/exception

Diagrama de herencia

Funciones miembro

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

std::bad_typeid:: bad_typeid

(1)
bad_typeid ( ) throw ( ) ;
(hasta C++11)
bad_typeid ( ) noexcept ;
(desde C++11)
(constexpr desde C++26)
(2)
bad_typeid ( const bad_typeid & other ) throw ( ) ;
(hasta C++11)
bad_typeid ( const bad_typeid & other ) noexcept ;
(desde C++11)
(constexpr desde C++26)

Construye un nuevo objeto bad_typeid 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 tipo dinámico std::bad_typeid entonces std:: strcmp ( what ( ) , other. what ( ) ) == 0 . (desde C++11)

Parámetros

other - otro objeto de excepción a copiar

std::bad_typeid::operator=

bad_typeid& operator=( const bad_typeid& other ) throw();
(hasta C++11)
bad_typeid& operator=( const bad_typeid& other ) noexcept;
(desde C++11)

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

Parámetros

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

Valor de retorno

* this

std::bad_typeid::what

virtual const char* what() const throw();
(hasta C++11)
virtual const char* what() const noexcept;
(desde C++11)
(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

Las implementaciones pueden, pero no están obligadas, a 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 202411L (C++26) constexpr para tipos de excepción

Ejemplo

#include <iostream>
#include <typeinfo>

struct S // The type has to be polymorphic
{
    virtual void f();
};

int main()
{
    S* p = nullptr;
    try
    {
        std::cout << typeid(*p).name() << '\n';
    }
    catch (const std::bad_typeid& e)
    {
        std::cout << e.what() << '\n';
    }
}

Posible salida:

Attempted a typeid of NULL pointer!