Zgodnie z tym, co przeczytałem, wykonywanie niewłaściwego dynamicznego przetwarzania w czasie wykonywania może albo zrzucić wyjątek bad_cast albo zwrócić zero.Jak kończy się niepowodzenie dynamic_cast?
Czy to prawda, że powróci do zera, jeśli rzucasz wskaźniki?
tj:
class Base { virtual void a(){} };
class Derived: public Base {};
int main() {
Base *base = new Base();
dynamic_cast<Derived*>(base);
return 0;
}
i że będzie rzucić bad_cast wyjątek podczas rzucania przedmiotów?
tj:
class Base { virtual void a(){} };
class Derived: public Base {};
int main() {
Base base;
Base& ref = base;
dynamic_cast<Derived&>(ref);
return 0;
}
OK, więc afirmacja jest prawidłowa. Dzięki. Edytowałem komunikat, aby uczynić klasę podstawową polimorficzną (dodając funkcję wirtualną) i używając rzutowania referencyjnego, aby wyjątek mógł zostać zgłoszony. – NIGO