Общая начальная последовательность с вложенной структуройC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Общая начальная последовательность с вложенной структурой

Сообщение Anonymous »

В C++ существует правило «общей начальной последовательности» для объединений:

В объединении стандартной компоновки с активным членом (11.5) типа структуры T1 , разрешено читать нестатический элемент данных m другого члена объединения структурного типа T2 при условии, что m является частью общей начальной последовательности T1 и T2; поведение такое, как если бы был назначен соответствующий член T1.

Как это взаимодействует с вложенными структурами? Например, разрешен ли доступ к us.s.s1.a1, u.s.s1.a2, us.s.s2.a1, u.s.s2.a2, если u.b активный? Или тот факт, что S::s1 и B::b1 имеют разные типы, означает, что S и B не имеют общей начальной последовательности?

struct A
{
int a1, a2;
};

struct S
{
A s1, s2;
};

struct B
{
int b1, b2, b3, b4;
};

union U
{
S s;
B b;
};

/******************/
U u;
u.s.s1.a1 = 1;
u.b.b1 == 1; // UB?
/******************/


Подробнее здесь: https://stackoverflow.com/questions/792 ... ted-struct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»