RTTI を無効にし-fno-rtti
て (GCC または/GR-
Visual Studio で) 動的キャストを使用してコードをコンパイルするとどうなるか知りたいです。コンパイラは に「フォールバック」しstatic_cast
ますか? (少なくともVSでは)警告を発行するだけなので、コンパイルされたコードは何をしますか?
より具体的には、RTTI を使用せずに、dynamic_cast でエラーが発生しないと確信しているコード (つまり、dynamic_cast
安全に a に置き換えることができる場所static_cast
) を次のようにコンパイルすると、どのような問題が発生する可能性がありますか?
class A{ /*...*/ } ;
class B : public A {
int foo() { return 42 ;}
} ;
//...
A * myA = new B() ;
int bar = (dynamic_cast<B*>(myA))->foo() ;