如果我有一个像这样的标准布局类型:
struct sl_t
{
int a;
};
还有这样一个联合体:
union un_t
{
int b;
double q;
};
我能否将联合体作为结构类型进行转换和使用?也就是说,我能否假设联合体本身是一个标准布局类型,并且数据在内存的开头对齐?
un_t obj;
sl_t * s = reinterpret_cast<sl_t*>(&obj);
s->a = 15;
assert( obj.b == 15 );
我必须使用联合体中变量的地址 &obj.b
吗?
请注意,如果我将结构体存储在联合体内部,根据C++11标准的9.5-1规定,我可以访问sl_t::a和un_t::b。
&obj.b
不是更短更安全吗?我很好奇你的动机。 - Dietrich Epp