std::bad_cast — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
||
Исключение этого типа генерируется, когда оператор dynamic_cast к ссылочному типу не проходит проверку во время выполнения (например, потому что типы не связаны наследованием), а также из-за std::use_facet, если запрошенный фасет не существует в локали.
Диаграмма наследования
Функции-элементы
создаёт новый объект bad_cast (public функция-элемент) | |
заменяет объект bad_cast (public функция-элемент) | |
| возвращает пояснительную строку (public функция-элемент) |
std::bad_cast::bad_cast
<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) | ||
|
|
(до C++11) | |
|
|
(начиная с C++11) | |
| (2) | ||
|
|
(до C++11) | |
|
|
(начиная с C++11) | |
Создаёт новый объект bad_cast с определённой реализацией строкой байтов, заканчивающейся нулём, которая доступна через what().
1) Конструктор по умолчанию.
2) Конструктор копирования. Если *this и other имеют динамический тип std::bad_cast , тогда std::strcmp(what(), other.what()) == 0. (начиная с C++11)
Параметры
| other | — | другой объект исключения для копирования |
std::bad_cast::operator=
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
|
|
(до C++11) | |
|
|
(начиная с C++11) | |
Присваивает содержимое содержимому other. Если *this и other имеют динамический тип std::bad_cast, тогда std::strcmp(what(), other.what()) == 0 после присваивания. (начиная с C++11)
Параметры
| other | — | другой объект исключения для присваивания |
Возвращаемое значение
*this
std::bad_cast::what
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
|
|
(до C++11) | |
|
|
(начиная с C++11) | |
Возвращает пояснительную строку.
Параметры
(нет)
Возвращаемое значение
Указатель на завершающуюся нулём строку с пояснительной информацией. Строка подходит для преобразования и отображения в виде std::wstring. Указатель гарантированно действителен, по крайней мере, до тех пор, пока объект исключения, из которого он получен, не будет уничтожен или пока не будет вызвана неконстантная функция-элемент (например, оператор присваивания копированием) для объекта исключения.
Примечание
Реализации могут, но не обязаны переопределять what().
Унаследован от std::exception
Функции-элементы
| уничтожает объект исключения (virtual public of std::exception функция-элемент) [править]
| |
| возвращает поясняющую строку (virtual public of std::exception функция-элемент) [править]
|
Пример
#include <iostream> #include <typeinfo> struct Foo { virtual ~Foo() {} }; struct Bar { virtual ~Bar() { std::cout << "~Bar\n"; } }; struct Pub : Bar { ~Pub() override { std::cout << "~Pub\n"; } }; int main() { Pub pub; try { [[maybe_unused]] Bar& r1 = dynamic_cast<Bar&>(pub); // OK, приведение вверх [[maybe_unused]] Foo& r2 = dynamic_cast<Foo&>(pub); // генерируется исключение } catch(const std::bad_cast& e) { std::cout << "e.what(): " << e.what() << '\n'; } }
Возможный вывод:
e.what(): std::bad_cast ~Pub ~Bar