我有一个联合代表一些所有uint32类型但具有不同位域的结构。我可以将其中一个联盟分配给其他联盟:
typedef union foo_u
{
// raw
uint32_t foo32;
// interpretation 1
struct
{
uint16_t a;
uint16_t b;
} foo_flavor1;
//interpretation 2
struct
{
uint32_t a : 16;
uint32_t b : 12;
uint32_t c : 4;
} foo_flavor2;
} foo;
foo a;
foo b;
a.foo32 = 10;
b.foo32 = 30;
b=a;
或者我必须这样做:
b.foo32 = a.foo32;
答案 0 :(得分:3)
b = a;
这样做完全没问题。
对于结构和联合,由标准明确定义一个到另一个相同类型,并且保证在赋值之后,它们应该包含完全相同的数据(排除填充,如果存在)。