基本上,我想得到typeid(*this).name()
,即真正的类型this
.
我想在GDB中得到它(不修改源代码).我尝试过,print typeid(*this)
但它说typeid
未知(因为我没有把它包含在源文件中).
我很想知道在使用动态强制转换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() ;
Run Code Online (Sandbox Code Playgroud)