这两个结构是否有相同的内存布局? (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 )“。
所以答案是肯定的
是的,这将工作。 根据编译器结构的打包设置,它可能不适用于第一个以外的成员。