Traductions de cette page?:

dynamic_cast

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