Spec-Zone.ru › C++

std::bad_typeid

Определено в заголовке <typeinfo>
class bad_typeid : public std::exception;

Исключение данного типа выбрасывается при применении оператора typeid к дереферированному нулевому указателю полиморфного типа.

cpp/error/exceptionstd-bad typeid-inheritance.svg

Схема наследования

Члены-функции

(конструктор)
создаёт новый объект bad_typeid
(публичный член-функция)
operator=
заменяет объект bad_typeid
(публичный член-функция)
what
возвращает строку объяснения
(публичный член-функция)

std::bad_typeid::bad_typeid

(1)
bad_typeid() throw();
(до C++11)
bad_typeid() noexcept;
(с C++11)
(2)
bad_typeid( const bad_typeid& other ) throw();
(до C++11)
bad_typeid( const bad_typeid& other ) noexcept;
(с C++11)

Создаёт новый объект bad_typeid с реализационно-зависимой строкой байтов с нулевым терминатором, доступной через what().

1) Конструктор по умолчанию.
2) Конструктор копирования. Если *this и other оба имеют динамический тип std::bad_typeid, то std::strcmp(what(), other.what()) == 0. (с C++11)

Параметры

other - другой объект исключения для копирования

std::bad_typeid::operator=

bad_typeid& operator=( const bad_typeid& other ) throw();
(до C++11)
bad_typeid& operator=( const bad_typeid& other ) noexcept;
(с C++11)

Присваивает содержимое объекта other. Если *this и other оба имеют динамический тип std::bad_typeid, то std::strcmp(what(), other.what()) == 0 после присваивания.(с C++11)

Параметры

other - другой объект исключения для присваивания

Значение возврата

*this

std::bad_typeid::what

virtual const char* what() const throw();
(до C++11)
virtual const char* what() const noexcept;
(с C++11)

Возвращает строку объяснения.

Параметры

(нет)

Значение возврата

Указатель на строку с нулевым терминатором, содержащую информацию для объяснения. Строка подходит для преобразования и отображения в std::wstring. Указатель гарантируется действительным по крайней мере до тех пор, пока объект исключения, из которого он получен, не будет уничтожен, или пока не будет вызван неконстантный член-функция (например, оператор присваивания копирования) для объекта исключения.

Примечания

Реализации разрешается, но не требуется переопределять what().

Наследованно от std::exception

Члены-функции

(деструктор)
[virtual]
уничтожает объект исключения
(виртуальная публичная член-функция std::exception)
what
[virtual]
возвращает строку объяснения
(виртуальная публичная член-функция std::exception)

Пример

#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';
    }
}

Возможный вывод:

Attempted a typeid of NULL pointer!

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/bad_typeid

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API