std::bad_typeid
Определено в заголовке <typeinfo> |
||
|---|---|---|
class bad_typeid : public std::exception; |
Исключение данного типа выбрасывается при применении оператора typeid к дереферированному нулевому указателю полиморфного типа.
Схема наследования
Члены-функции
|
(конструктор)
|
создаёт новый объект 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().
*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) |
|
[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