我很想知道在编译时使用动态转型但禁用RTTI(无论是在GCC上使用-fno-rtti
还是在Visual Studio上使用/GR-
)会发生什么。编译器是否会“退而求其次”使用static_cast
?因为(至少在VS上)它只会发出一个警告,那么编译后的代码会做什么?
更具体地说,如果我在没有RTTI的情况下编译代码,并且我确定使用dynamic_cast
不可能出现错误(即可以安全替换为static_cast
的代码),会发生什么问题,例如:
class A{ /*...*/ } ;
class B : public A {
int foo() { return 42 ;}
} ;
//...
A * myA = new B() ;
int bar = (dynamic_cast<B*>(myA))->foo() ;
dynamic_cast
,如果你确定可以使用static_cast
呢? - edA-qa mort-ora-y