Рассмотрим следующий фрагмент кода, предполагая, что 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
запускает время жизни члена y
из temp
, и чтение temp.x
будет неопределенным, когда я получаю новую копию типа Punner
из функции copy
, если предположить, что время жизни копии y
члена также равно уже запущен, и чтение элемента x
копии все еще не определено, или оно просто не указано, и после получения копии я действительно могу свободно читать либо из x
, либо из y
(в данном случае чтение из x
)?
Я знаю, что мой вопрос в некотором роде похож на этот, но, к сожалению, я не смог с уверенностью определить точный ответ на свой вопрос из ответов на него.