【发布时间】:2019-11-22 23:30:31
【问题描述】:
考虑以下代码片段,假设A 和B 都是大小相同的普通类型,例如int64_t 和double,或类似的东西:
union Punner {
A x;
B y;
};
Punner copy(Punner in)
{
return in;
}
A pun(B in)
{
Punner temp;
temp.y = in;
return copy(temp).x;
}
虽然我知道temp.y = in 行开始了temp 的y 成员的生命周期并且读取temp.x 将是未定义的,但当我从@987654333 获得Punner 类型的新副本时@函数,是否假设副本的y成员的生命周期也已经开始,并且读取副本的x成员仍然未定义,或者它只是未指定,并且在获得副本后,我实际上可能从x 或 y 随意(在这种情况下从 x 读取)?
我知道我的问题在某些方面与this 相似,但遗憾的是,我无法从对我的问题的回答中自信地确定一个准确的答案。
【问题讨论】:
-
说实话,中间副本并不重要。
标签: c++ c++11 type-punning