☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

避免向下类型转换

12.6 ID_downCast
目录 › next › previous

从基类到派生类的向下类型转换往往意味着现有接口已经不能满足需求,故应避免这种转换。

示例:

class A { .... };

class B: public A {
public:
    void bar();   // A new function
};

void foo(A* a) {
    if (B* p = dynamic_cast<B*>(a)) {   // Bad, down cast
        p->bar();
    }
}

例中 foo 接口对基类参数进行向下类型转换是不利于维护的,当这种特殊处理较多时,应利用多态方法合理重构。

class A {
    ....
public:
    virtual void bar();
};

class B: public A {
public:
    void bar() override;
};

void foo(A* a) {
    if (a) {
        a->bar();   // Good
    }
}

相关

ID_nonDynamicDownCast ID_narrowCast

参考

C++ Core Guidelines ES.48
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.