std::bad_cast
Определено в заголовке <typeinfo> | ||
|---|---|---|
class bad_cast : public std::exception; |
Исключение этого типа выбрасывается, когда dynamic_cast к типу ссылки не проходит проверку во время выполнения (например, потому что типы не связаны наследованием), а также из std::use_facet , если необходимый фрагмент не существует в локали.
Схема наследования
Члены-функции
| (конструктор) | создает новый объект bad_cast (публичный член-функция) |
| operator= | заменяет объект bad_cast (публичный член-функция) |
| what | возвращает строку объяснения (публичный член-функция) |
std::bad_cast::bad_cast
| (1) | ||
bad_cast() throw(); | (до C++11) | |
bad_cast() noexcept; | (с C++11) | |
| (2) | ||
bad_cast( const bad_cast& other ) throw(); | (до C++11) | |
bad_cast( const bad_cast& other ) noexcept; | (с C++11) |
Создает новый объект bad_cast с реализационно-определенной строкой байтов с нулевым завершением, доступной через what().
*this и other оба имеют динамический тип std::bad_cast, то std::strcmp(what(), other.what()) == 0.(с C++11)
Параметры
| other | - | другой объект исключения для копирования |
std::bad_cast::operator=
bad_cast& operator=( const bad_cast& other ) throw(); | (до C++11) | |
bad_cast& operator=( const bad_cast& other ) noexcept; | (с C++11) |
Присваивает содержимое объекта other. Если *this и other оба имеют динамический тип std::bad_cast, то std::strcmp(what(), other.what()) == 0 после присвоения.(с C++11)
Параметры
| other | - | другой объект исключения для присвоения |
Возвращаемое значение
*this
std::bad_cast::what
virtual const char* what() const throw(); | (до C++11) | |
virtual const char* what() const noexcept; | (с C++11) |
Возвращает строку объяснения.
Параметры
(нет)
Возвращаемое значение
Указатель на строку с нулевым завершением, содержащую объяснительную информацию. Строка подходит для преобразования и отображения как std::wstring. Указатель гарантированно будет действительным как минимум до тех пор, пока объект исключения, из которого он получен, не будет уничтожен или пока не будет вызван не-const член-функция (например, оператор присваивания копирования) объекта исключения.
Примечания
Реализации разрешено, но не обязательно переопределять what().
Наследованно от std::exception
Члены-функции
|
[virtual] | уничтожает объект исключения (виртуальная публичная член-функция std::exception) |
|
[virtual] | возвращает строку объяснения (виртуальная публичная член-функция 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, upcast
[[maybe_unused]]
Foo& r2 = dynamic_cast<Foo&>(pub); // throws
}
catch (const std::bad_cast& e)
{
std::cout << "e.what(): " << e.what() << '\n';
}
}Возможный вывод:
e.what(): std::bad_cast ~Pub ~Bar
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/bad_cast