小编Mil*_*rdy的帖子

static_cast和dynamic_cast在特定场景中的不同行为

我在下面的场景中没有弄清楚static_cast和dynamic_cast之间的真正区别:

                                **///with static_cast///**
    class Foo{};
    class Bar: public Foo
    {
        public:
          void func()
          {
            return;
          }
    };

    int main(int argc, char** argv)
    {
        Foo* f = new Foo;
        Bar* b = static_cast<Bar*>(f);
        b->func();
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出:

成功构建和编译!

                                **///with dynamic_cast///**
    class Foo{};
    class Bar: public Foo
    {
        public:
          void func()
          {
            return;
          }
    };

    int main(int argc, char** argv)
    {
        Foo* f = new Foo;
        Bar* b = dynamic_cast<Bar*>(f);
        b->func();
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出:

main.cpp:在函数'int main(int,char**)'中:main.cpp:26:34:错误:不能用dynamic_cast'f'(类型'类Foo*')来键入'class Bar*'(源类型不是多态的)Bar*b = dynamic_cast(f);

如果有人能帮助我理解这一点,我将不胜感激!

c++ oop inheritance dynamic-cast static-cast

4
推荐指数
1
解决办法
146
查看次数

标签 统计

c++ ×1

dynamic-cast ×1

inheritance ×1

oop ×1

static-cast ×1