复制并集对象时,是否创建成员子对象?

当访问联合的另一个成员时,C ++标准过去对发生的情况保持沉默,但这是固定的,其解释是为了允许成员访问一个联合对象,目的是将其分配给尚不存在的对象,通过分配给对象或其成员之一,可以神奇地创建对象。本质上,成员访问运算符返回对将来对象的承诺,而您必须在分配时使用它。

给出

union U {
  int i;
  long l;
};

我们可以通过分配来创建il成员子对象:

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);
gh88186024 回答:复制并集对象时,是否创建成员子对象?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2955358.html

大家都在问