Аналогично c объединением и битовыми полями , но в C++
, включая доступ к начальной последовательности
Аналогично Объединение общей начальной последовательности с примитивом , но с использованием bitfields
Что я хочу сделать, это:
struct A
{
short common : 1;
short a1: 5;
short a2: 8;
};
struct B
{
short common : 1;
short b1: 3;
short b2: 4;
short b3: 6;
};
union C
{
A a;
B b;
};
Затем используйте его следующим образом:
short foo(C data)
{
if (data.a.common)
{
return data.a.a1*data.a.a2;
}
return data.b.b1*data.b.b2*data.b.b3;
}
Кажется, проблема в том, что если data.a.common
false, код получит доступ к данным, установленным как B
через член A
В стандарте, кажется, есть язык об объединениях и аналогичных исходных последовательностях, но не уверен, что common
какbitfield
будет считать
9.5.1, разрешено проверять общую начальную последовательность любого из элементов структуры стандартного макета;
Любые разъяснения приветствуются