c++ - 'unrelated types' 之间的 static_cast

标签 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;}
};

为什么我可以执行此转换?

A* pA = new A;

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

pB->funcB();

A 和 B 不相关,不是吗?

最佳答案

它们可能不相关,但编译器不会在这里进行 inter-cast 诊断。

它只是说“哦,CA 的派生类,就我而言这是合法的”。
在下一行它说“哦,BC 的基类,就我而言这是合法的”。
仅此而已。在您的情况下,C 链接 AB 之间的转换。

关于c++ - 'unrelated types' 之间的 static_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430907/

相关文章:

c++ - 如何使用 C 终止远程计算机上的进程?

c++ - CRTP 没有编译时检查吗?

c++ - 为什么 dynamic_cast 存在?

c++ - 在将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

c++ - 为什么这些创建字符串的方法之间有如此大的差异

c++ - 如何删除链表中的特定节点?

c++ - 加载队列而不是列表

c++ - 无效 C 风格强制转换后的方法调用

c++ - 使用 static_cast<datatype> 将 float 转换为字符串 c++

c++ - reinterpret_cast 是否存储对象指针的拷贝?