Исключение bad_cast

Исключение bad_cast создается dynamic_cast оператором в результате неудачного приведения к ссылочного типа.

Синтаксис

catch (bad_cast)
   statement

Замечания

Интерфейс для bad_cast :

class bad_cast : public exception

Следующий код содержит пример сбоя dynamic_cast , который вызывает исключение bad_cast .

// expre_bad_cast_Exception.cpp
// compile with: /EHsc /GR
#include <typeinfo>
#include <iostream>

class Shape {
public:
   virtual void virtualfunc() const {}
};

class Circle: public Shape {
public:
   virtual void virtualfunc() const {}
};

using namespace std;
int main() {
   Shape shape_instance;
   Shape& ref_shape = shape_instance;
   try {
      Circle& ref_circle = dynamic_cast<Circle&>(ref_shape);
   }
   catch (bad_cast b) {
      cout << "Caught: " << b.what();
   }
}

Исключение возникает из-за того, что объект, который выполняется приведение (фигура), не является производным от указанного типа приведения (Circle). Чтобы исключение не создавалось, добавьте в функцию main следующие объявления:

Circle circle_instance;
Circle& ref_circle = circle_instance;

Затем измените смысл приведения в try блоке следующим образом:

Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);

Участники

Конструкторы

Конструктор Description
bad_cast Конструктор для объектов типа bad_cast.

Функции

Function Description
Что Подлежит уточнению

Операторы

Operator Description
operator= Оператор назначения, который назначает один bad_cast объект другому.

bad_cast

Конструктор для объектов типа bad_cast.

bad_cast(const char * _Message = "bad cast");
bad_cast(const bad_cast &);

operator=

Оператор назначения, который назначает один bad_cast объект другому.

bad_cast& operator=(const bad_cast&) noexcept;

что

const char* what() const noexcept override;

См. также

Оператор dynamic_cast
Ключевые слова
Современные рекомендации по C++ по исключению и обработке ошибок