Как происходит сбой dynamic_cast?

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

Можно ли сказать, что он вернет ноль, если вы нарисуете указатели?

то есть:

class Base { virtual void a(){} };
class Derived: public Base {};

int main () {
  Base *base = new Base();
  dynamic_cast<Derived*>(base);
  return 0;
} 

И что он будет генерировать исключение bad_cast при создании объектов?

то есть:

class Base { virtual void a(){} };
class Derived: public Base {};

int main () {
  Base base;
  Base& ref = base;
  dynamic_cast<Derived&>(ref);
  return 0;
}

Ответы

Ответ 1

dynamic_cast вернет NULL при плохом нажатии, если вы нажмете указатель; он бросает std::bad_cast при литье ссылок. Ошибка компиляции, чтобы попытаться сбрасывать объекты с помощью dynamic_cast (например, с помощью dynamic_cast<Derived>(base))