Syntaxe :
T& dynamic_cast<T&> (objet); T* dynamic_cast<T*> (objet);
Le mot-clef dynamic_cast
“caste” une donnée pointée (ou référencée) dans
un autre type. Ce type de cast réalise une vérification à l’exécution de la
validité de la conversion de type.
Si vous essayez de “caster” vers un pointeur mais que le type n'est pas le
type réel de l'objet
alors le résultat de ce “cast” sera NULL
.
Si vous essayez de “caster” vers une référence mais que le type n'est pas
le type réel de l'objet
alors dynamic_cast
va lancer une
exception de type std::bad_cast.
struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a; B b; A* ap = &b; B* b1 = dynamic_cast<B*> (&a); // NULL, parce que 'a' n'est pas un 'B' B* b2 = dynamic_cast<B*> (ap); // 'b' C* c = dynamic_cast<C*> (ap); // NULL. A& ar = dynamic_cast<A&> (*ap); // Ok. B& br = dynamic_cast<B&> (*ap); // Ok. C& cr = dynamic_cast<C&> (*ap); // std::bad_cast }
Sujets connexes : const_cast, reinterpret_cast, static_cast, casting_comparison