Spec-Zone.ru › C++

std::bad_cast

Определено в заголовке <typeinfo>
class bad_cast : public std::exception;

Исключение этого типа выбрасывается, когда dynamic_cast к типу ссылки не проходит проверку во время выполнения (например, потому что типы не связаны наследованием), а также из std::use_facet , если необходимый фрагмент не существует в локали.

cpp/error/exceptionstd-bad cast-inheritance.svg

Схема наследования

Члены-функции

(конструктор)
создает новый объект 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().

1) Конструктор по умолчанию.
2) Конструктор копирования. Если *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)
what
[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

Spec-Zone.ru

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