Je me demande encore pourquoi ce qui suit donne std::bad_cast
exceptionexception bad_cast lancé lorsque vous faites downcasting de l'objet de la classe de base par référence à l'objet de classe dérivée
#include <typeinfo>
class A {virtual void fun() {}};
class B : public A {};
int main() {
try {
A a;
B b = dynamic_cast<B&>(a);
} catch (std::bad_cast& e) {
std::cerr << e.what() << '\n';
}
}
classe A
est une classe polymorphique classe B
est publiquement dérivé de A
correctement faire un downcast de la classe de base A
objet par référence, dynamic_cast
accepte un argument de référence mais encore pourquoi cette exception?
Vous attendiez-vous à ce que l'opérateur de distribution retourne une référence à un objet B valide? Où pourrait-il en trouver un? –
'A a' n'est pas un' B', donc l'échec de cast est le bon comportement. – dasblinkenlight
Si vous ne voulez pas d'exception, placez-le sur un pointeur au lieu d'une référence, puis vérifiez la valeur de retour par rapport à nullptr pour voir si la distribution a réussi. – xaxxon