static_cast 'unrelated types'

static_cast between 'unrelated types'

本文关键字:types unrelated cast static      更新时间:2023-10-16

如果我有这样的类结构:

class A
{
public: 
    int a;
    void funcA(){a = 0;}
};
class B
{
public:
    int b;
    void funcB(){b = 0;}
};
class C: public A, public B
{
public:
    int c;
    void funcC(){c = 0;}
};

为什么我可以执行这个强制转换?

A* pA = new A;
C* pC = static_cast<C*> (pA);
B* pB = static_cast<B*> (pC);
pB->funcB();

A和B是不相关的,不是吗?

它们可能是不相关的,但是编译器在这里不会进行跨转换诊断。

它只是说"哦,CA的派生类,就我而言这是合法的"
在接下来的一行中,它说"哦,BC的基类,就我而言,这是合法的"。差不多就是这样了。在您的示例中,C在强制转换之间链接AB