Как не работает dynamic_cast? - PullRequest
       18

Как не работает dynamic_cast?

16 голосов
/ 30 августа 2011

Согласно тому, что я прочитал, при выполнении неправильного динамического выполнения во время выполнения может возникать исключение 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 Ответ

30 голосов
/ 30 августа 2011

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

...