考虑以下结构
:
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)
?
最佳答案
9.2.19 指向标准布局结构对象的指针,使用 reinterpret_cast 适当转换,指向它的 初始成员(或者如果该成员是位域,则指向它所在的单元),反之亦然。 [ 笔记: 因此,标准布局结构对象中可能存在未命名的填充,但不是在其开头, 必要时,以实现适当的对齐。 —尾注].
关于c++ - 结构成员的运行时对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055494/