Это очень опасная область в стандарте C ++ - в основном экземпляр объединения, в соответствии со стандартом, может обрабатываться только в одно время, как если бы он содержал один «активный» член - последний записанный в него. Итак:
union U {
int a;
char c;
};
тогда:
U u;
u.a = 1;
int n = u.a;
u.c = 2;
char c = u.c;
в порядке, но:
U u;
u.a = 1;
char c = u.c;
нет. Однако существует огромный объем существующего кода, который говорит, что оба в порядке. и ни в одном, ни в любом случае не будет выдано исключение для «недействительного» доступа. Язык C ++ использует исключения исключительно (!) Экономно.
По сути, если вы обнаруживаете, что в своем коде C ++ используете союзы для работы с чем угодно, кроме библиотек C, что-то не так.