Traduzioni di questa pagina?:

dynamic_cast

Sintassi:

    T& dynamic_cast<T&> (object);
    T* dynamic_cast<T*> (object);

La parola riservata dynamic_cast esegue l'operazione di cast da un tipo di puntatore o reference ad un altro. dynamic_cast esegue controlli a run-time per controllare la congruenza dell'operazione.

Se si cerca di fare un cast incongruente di un puntatore verso un altro tipo di puntatore allora il valore ritornato dal dynamic_cast sarà NULL. Se invece si cerca di fare un cast incongruente con delle reference l'operazione lancia un eccezione di 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, because 'a' is not a '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
  }

Argomenti correlati: const_cast, reinterpret_cast, static_cast, casting_comparison