gpt4 book ai didi

c++ - dynamic_cast<> 失败但 static_cast<> 有效

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:38 26 4
gpt4 key购买 nike

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

  • 1) BaseClass 是从父类 IFlow 派生的接口(interface)
  • 2) ChildClass派生自它即来自基类
  • 3) 在 childClass Init 函数中,我使用 dynamic_cast 将 IFlow 的对象转换为 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) ;
    }

在上面的代码中,dynamic_cast 的第 2 行返回零,但如果 dynamic_cast 更改为 static_cast,则代码将按预期工作.请指教

最佳答案

dynamic_cast 在两种情况下“不起作用”:

  1. 您以某种方式在没有 RTTI 的情况下编译了您的代码。修复您的编译器设置。

  2. dynamic_cast 的全部目的是确保转换确实有效。从 child 到 parent 的转换总是有效的,因为某种类型的每个 child 都保证是那种类型(整个“所有的狗都是动物,但并非所有的动物都是狗”的事情)。如果对象实际上不是该子类型,则从父对象到子对象的转换可能会失败。如果您提供的 IFlow 实际上不是 BaseClassdynamic_cast 将返回空指针。

    此外,您的 static_cast 不起作用。它只是返回一个值。一个值,如果您曾经使用它,会导致未定义的行为。因此,它仅在返回一个您可以尝试使用的值的意义上“有效”。

所以这两件事中的一件发生了。哪一个由您决定,因为您没有给我们someMethod 的实现。

关于c++ - dynamic_cast<> 失败但 static_cast<> 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11289763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com