TYPE& dynamic_cast<TYPE&> (object);
TYPE* dynamic_cast<TYPE*> (object);
たとえば、このような型を取得できます。C++ は静的型付け言語ですが、なぜ実行時に型を取得できるのでしょうか
TYPE& dynamic_cast<TYPE&> (object);
TYPE* dynamic_cast<TYPE*> (object);
たとえば、このような型を取得できます。C++ は静的型付け言語ですが、なぜ実行時に型を取得できるのでしょうか
C++ の変数には、静的に決定される型があります。オブジェクトは必ずしもそうではありません。静的に既知の型の変数を介してオブジェクトを処理するだけで済みます。
例:
int * p = new int[argc]; // there is an object whose dynamic type is int[argc]
Base * p = new Derived; // *p has dynamic type Derived
Base * q = rand() % 2 ? new Derived1 : new Derived2; // ???
C++ は静的型言語です。これは、実行時に新しいクラス/型宣言を作成して、そのオブジェクト/変数をインスタンス化できないことを意味します。これは Javascript または PHP で可能です。
dynamic_cast
RTTIの一部であり、実行時に型の情報を提供しようとする C++ の試みです。を介してオブジェクトをキャストする場合 dynamic_cast
、新しい型を作成するのではなく、ポリモフィックなことを行っているだけです。
ただし、C++ は静的型と動的型の両方であると言えます。