当复制联合对象时,是否会创建成员子对象?

2024-05-01

当访问联合体的另一个成员时,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(使用前将#替换为@)

当复制联合对象时,是否会创建成员子对象? 的相关文章

随机推荐