内存布局问题

这两个结构是否有相同的内存布局? (C ++)

struct A { int x; char y; double z; }; struct B { A a; }; 

进一步,我可以访问x,y,z成员,如果我手动将此对象转换为A

 struct C { A a; int b; }; 

提前致谢。

编辑:

如果他们是classes而不是structs呢?

是的,是的。 后者通常用于模拟C中的OO继承。

您可以通过检查相对于每个实例开始的字段偏移来验证这一点。

 A aObj; B bObj; C cObj; int xOffset1 = &aObj.x - &aObj; int xOffset2 = &bObj.ax - &bObj; ASSERT(xOffset1 == xOffset2); 

等等

$ 9.2 / 16-“如果两个标准布局结构(子句9)类型具有相同数量的非静态数据成员,并且相应的非静态数据成员(按声明顺序)具有与布局兼容的类型(3.9 )“。

所以答案是肯定的

是的,这将工作。 根据编译器结构的打包设置,它可能不适用于第一个以外的成员。