考虑以下两个结构:
struct A
{
// A bunch of standard layout data
};
struct B:public A
{
// Other data
};
和一个对象
B foo;
假设 sizeof(A) 在编译器之间没有差异,打包是相同的,并且 B 不添加任何虚拟方法,当使用 gcc 或 msvc 编译 Windows x86 或x86-64平台?
编辑:我认为实现继承的最佳方法是将 A 放在 B 之前。否则,向上转换将需要将 this 指针偏移 sizeof(B) ,这很愚蠢。至少 GCC 将 B 的内容放在 A 的内容之后。