如果我有这样的标准布局类型:联盟是标准布局类型吗?
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标准保证我可以访问两个sl_t ::和un_t :: B,指的是9.5-1。
但是......是不是'&obj.b'都短,更安全吗?我很好奇你的动机。 –
我仍然需要围绕它的reinterpret_cast。我主要好奇,但我确实有一个情况,它可以方便地依靠这个。 –