По определению объединения: вы не можете одновременно использовать v.a
и v.b
, потому что оба поля имеют один и тот же адрес.Чтобы процитировать стандарт:
Тип объединения описывает перекрывающийся непустой набор объектов-членов , каждый из которых имеет необязательно указанное имя и, возможно, отдельный тип.
Здесь, как только вы назначаете v.b
, вы переопределяете v.a
.В вашем случае все не выглядит ужасно, потому что обе переменные имеют один и тот же тип, но просто представьте, что если a
был бы float
и b
символом, например.
Если ваша цельчтобы var
была составной переменной, содержащей два разных int
, тогда вы должны использовать struct
, а не union
.