当访问联合体的另一个成员时,C++ 标准过去对发生的情况保持沉默,但这一点已被修复,以解释允许对联合对象的成员访问是为了分配给该尚不存在的对象,这会神奇地通过分配给对象或其成员之一来创建对象。本质上,成员访问运算符返回未来对象的承诺,您必须将其与赋值一起使用。
Given
union U {
int i;
long l;
};
我们可以创建一个i
or l
通过赋值的成员子对象:
U u;
u.i = 2; // creates an int
u.l = 3; // creates a long (destroys the int)
但是当联合对象被复制时会发生什么?编译器如何“知道”要“创建”哪个成员?
U u1, u2;
fill(&u1);
u2 = u1; // which u2 member is created here?
使用时memcpy
在填充有数值的字节缓冲区(不是从另一个联合对象填充)的联合上,哪个成员变为“活动”?
char buf[sizeof(U)] = { ... };
U u;
memcpy(&u, buf, sizeof u);
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)