在我的项目中,我有一个假设的场景:
3)在childClass Init函数中,我dynamic_cast用来将IFlow的objet转换为BaseClass,如下所示:
void ChildClass::init()
{
IFlow* pFlow = someMethod(); //it returns the IFlow object pointer
//this works for static cast but fails for dynamic cast
BaseClass *base = dynamic_cast<BaseClass*>(pFlow) ;
}
Run Code Online (Sandbox Code Playgroud)在上面的代码中,第二行dynamic _cast返回零,但如果dynamic_cast更改为static_cast则代码按预期工作.请指教
dynamic_cast 在两个实例中"不起作用":
你已经以某种方式编译了没有RTTI的代码.修复编译器设置.
整个目的dynamic_cast是确保演员实际工作.从孩子到父母的铸造总是有效的,因为某种类型的每个孩子都保证是那种类型(整个"所有的狗都是动物,但不是所有的动物都是狗").如果对象实际上不是该子类型,则从父级转换为子级可能会失败.dynamic_cast如果IFlow你给它的实际上不是a,它将返回一个空指针BaseClass.
此外,你static_cast不工作.它只返回一个值.如果您使用它,则会导致未定义的行为.所以它只是"工作",因为它返回了一个你可以尝试使用的值.
所以发生了这两件事之一.哪一个由你来找,因为你没有给我们执行someMethod.