Как происходит сбой 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)
)