这两个结构是否具有相同的内存布局? (C ++)
struct A
{
int x;
char y;
double z;
};
struct B
{
A a;
};
如果我手动将此对象转换为A
,我还可以访问x,y,z成员吗?
struct C
{
A a;
int b;
};
提前致谢。
编辑:
如果他们是classes
而不是structs
怎么办?
答案 0 :(得分:7)
是的,是的。后者通常用于在C中模拟OO继承。
答案 1 :(得分:4)
您可以通过检查相对于每个实例的开头的字段偏移来自行验证。
A aObj;
B bObj;
C cObj;
int xOffset1 = &aObj.x - &aObj;
int xOffset2 = &bObj.a.x - &bObj;
ASSERT(xOffset1 == xOffset2);
等等
答案 2 :(得分:2)
$ 9.2 / 16-“如果两个标准布局结构(第9节)类型具有相同数量的非静态数据成员,并且相应的非静态数据成员(按声明顺序)具有布局兼容性,则它们是布局兼容的类型(3.9)。“
所以答案是'是'
答案 3 :(得分:1)
是的,那会有用。根据编译器结构打包设置,它可能不适用于第一个以外的成员。