cpp/keyword/dynamic cast

Da cppreference.com
Ir para: navegação, pesquisa

Sintaxe:

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

O dynamic_cast faz o cast(conversão) de um ponteiro ou referência de um tipo de dado para outro, com a realização de um runtime check como forma de garantir o validação desse cast.

Se você tentar fazer o cast do ponteiro para um outro tipo, e o tipo fornecido não for um argumento válido para o objeto, isso resultará em um cast de um ponteiro apontando para NULL.

Se você tentar fazer o cast de uma referência, e o tipo fornecido não for um argumento válido para o objeto, então seu cast irá lançar uma std::bad_cast exceção.

  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, porquê 'a' não é um '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
 
  }
Ferramentas pessoais
Espaços nominais
Variantes
Acções
Navegação
Ferramentas
Noutras línguas