dynamic_cast <>失败但static_cast <>有效

use*_*421 4 c++ dynamic-cast

在我的项目中,我有一个假设的场景:

  • 1)BaseClass是从父类IFlow派生的接口
  • 2)ChildClass派生自它,即从Base类派生
  • 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则代码按预期工作.请指教

Nic*_*las 7

dynamic_cast 在两个实例中"不起作用":

  1. 你已经以某种方式编译了没有RTTI的代码.修复编译器设置.

  2. 整个目的dynamic_cast确保演员实际工作.从孩子到父母的铸造总是有效的,因为某种类型的每个孩子都保证是那种类型(整个"所有的狗都是动物,但不是所有的动物都是狗").如果对象实际上不是该子类型,则从父级转换为子级可能会失败.dynamic_cast如果IFlow你给它的实际上不是a,它将返回一个空指针BaseClass.

    此外,你static_cast不工作.它只返回一个值.如果您使用它,则会导致未定义的行为.所以它只是"工作",因为它返回了一个你可以尝试使用的值.

所以发生了这两件事之一.哪一个由你来找,因为你没有给我们执行someMethod.