我知道标准没有指定如何打包数据。我只是想了解类的内存布局(尤其是如何dynamic_cast<void*>
保证返回指向最派生类开头的指针)。我想不出关于以下代码输出的任何解释:
struct A{ int a;};
struct B{ int b;};
struct C: public A, public B { int c;};
struct D:public C {int d;};
int main(){
D* ob=new D;
A* a = ob;
B* b = ob;
C* c = ob;
}
打印指针的值表明 , ,a
始终具有相同的值,只是添加了 4 个字节作为偏移量。是偶然的吗?或者背后有什么逻辑?c
d
b
编辑: 从概念上讲,布局应该像图像,但不知何故,点 A、C 和 D 合并为一个。