'无关类型'之间的static_cast

Quo*_*dis 1 c++ static-cast

如果我有这个类结构:

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;}
};
Run Code Online (Sandbox Code Playgroud)

为什么我可以执行此演员表?

A* pA = new A;

C* pC = static_cast<C*> (pA);
B* pB = static_cast<B*> (pC);

pB->funcB();
Run Code Online (Sandbox Code Playgroud)

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

Xeo*_*Xeo 5

它们可能不相关,但编译器不会在此处进行内部诊断.

它只是说"哦,C是一个衍生类A,就我而言是合法的".
在下一行中,它说"哦,B是我的基础类C,就我而言是合法的".
这就是它.在你的情况下,C链接AB演员之间.

  • 好,谢谢.因此"不安全"的声誉? (3认同)
  • @Quo:C++只是给你足够的绳索来吊死自己.这取决于你如何正确使用它. (3认同)
  • @Quo:或者换句话说,**C++不是你的保姆**. (3认同)