Spec-Zone.ru › C++

std::bad_typeid

Определён в заголовочном файле <typeinfo>
class bad_typeid : public std::exception;

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

cpp/error/exception

Диаграмма наследования

Функции-члены

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

std::bad_typeid::bad_typeid

bad_typeid() throw();
(1) (до C++11)
bad_typeid() noexcept;
(начиная с C++11)
bad_typeid( const bad_typeid& other ) throw();
(2) (до 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)
(constexpr начиная с C++26)

Возвращает поясняющую строку.

Возвращаемое значение

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

При вычислении во время компиляции возвращаемая строка кодируется с использованием обычной кодировки строковых литералов.

(начиная с C++26)

Примечания

Реализация может переопределять what(), но не обязана это делать.

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

Функции-члены

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

Примечания

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_constexpr_exceptions 202411L (C++26) constexpr для типов исключений

Пример

#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/cpp/types/bad_typeid

Spec-Zone.ru

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