请考虑关注struct
:
struct SomeStruct
{
int a;
float b;
double c;
};
据我所知,在声明SomeStruct
类型的对象时,struct
的第一个成员的地址(在这种情况下为a
)等于该地址。对象本身。
SomeStruct obj;
assert(reinterpret_cast<uintptr_t>(&obj) == reinterpret_cast<uintptr_t>(&obj.a));
我是否可以假设a
成员的运行时地址即使SomeStruct
也符合alignof(int) != alignof(SomeStruct)
的对齐要求?
答案 0 :(得分:5)
<强> 9.2.19 强> 指向标准布局结构对象的指针,使用reinterpret_cast进行适当转换,指向它 初始成员(或者如果该成员是位字段,则指向它所在的单位),反之亦然。 [ 注意: 因此,在标准布局结构对象中可能存在未命名的填充,但不是在其开头, 必要时,以实现适当的对齐。 - 注意事项]。