如果我有这样的类结构:
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 不相关,不是吗?
最佳答案
它们可能不相关,但编译器不会在这里进行 inter-cast 诊断。
它只是说“哦,C
是A
的派生类,就我而言这是合法的”。
在下一行它说“哦,B
是 C
的基类,就我而言这是合法的”。
仅此而已。在您的情况下,C
链接 A
和 B
之间的转换。
关于c++ - 'unrelated types' 之间的 static_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430907/