我很想知道在禁用 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() ;