В объединении стандартной компоновки с активным членом (11.5) типа структуры T1 разрешается читать нестатический элемент данных m другого члена объединения типа структуры T2 при условии, что m является частью общей начальной последовательности T1 и T2; поведение такое, как если бы был назначен соответствующий член T1.
Они также приводят пример:
Код: Выделить всё
struct T1 { int a, b; };
struct T2 { int c; double d; };
union U { T1 t1; T2 t2; };
int f() {
U u = { { 1, 2 } }; // active member is t1
return u.t2.c; // OK, as if u.t1.a were nominated
}
Когда я просматриваю обе структуры, T1 и T2, начиная с самого начала (они говорят «начальная последовательность»), могут быть некоторые члены, которые имеют один и тот же тип данных (они говорят «общий»). Пока это так, я могу получить к ним доступ. Как только они будут отличаться, я больше не смогу к ним получить доступ.
Позвольте мне немного изменить этот пример:
Код: Выделить всё
struct T1 { int a, b, c, d, e; };
struct T2 { int m, n, o, p; double q; };
union U { T1 t1; T2 t2; };
Это объединение в моем коде:
Код: Выделить всё
typedef union
{
struct
{
Bool Mon :1;
Bool Tue :1;
Bool Wed :1;
Bool Thu :1;
Bool Fri :1;
Bool Sat :1;
Bool Sun :1;
} Flags;
UInt1 Days;
} WeekT;
>
Подробнее здесь: https://stackoverflow.com/questions/797 ... date-union
Мобильная версия