std::bad_typeid
| Определено в заголовочном файле <typeinfo>
|
||
class bad_typeid : public std::exception; |
||
Исключение этого типа возникает, когда оператор typeid применяется к разыменованному значению нулевого указателя полиморфного типа.
Диаграмма наследования
Функции-элементы
(конструктор) |
создаёт новый объект bad_typeid (public функция-элемент) |
operator= |
заменяет объект bad_typeid (public функция-элемент) |
what |
возвращает пояснительную строку (public функция-элемент) |
std::bad_typeid::bad_typeid
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>| (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=
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody> 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
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody> virtual const char* what() const throw(); |
(до C++11) | |
virtual const char* what() const noexcept; |
(начиная с C++11) | |
Возвращает пояснительную строку.
Параметры
(нет)
Возвращаемое значение
Указатель на завершающуюся нулём строку с пояснительной информацией. Строка подходит для преобразования и отображения в виде std::wstring. Указатель гарантированно действителен, по крайней мере, до тех пор, пока объект исключения, из которого он получен, не будет уничтожен или пока не будет вызвана неконстантная функция-элемент (например, оператор присваивания копированием) для объекта исключения.
Примечание
Реализации могут, но не обязаны переопределять what().
Унаследован от std::exception
Функции-элементы
[virtual] |
уничтожает объект исключения (virtual public of std::exception функция-элемент)
|
[virtual] |
возвращает поясняющую строку (virtual public of std::exception функция-элемент)
|
Пример
#include <iostream>
#include <typeinfo>
struct S { // Тип должен быть полиморфным
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!