- union的默认访问权限为public,和struct一样,class则是private,他们的子类也是如此,(class和struct还有struct无法作为模板这方面的不同点)
- union所有成员共同使用一块内存,因此union中只能有一个成员被赋值,union的内存大小等于成员中内存最大的内存(比如有一个int和byte成员,union的大小为int所占的内存大小),每次重新赋值则会覆盖前面赋值的成员的值。
union U {
unsigned short int aa;
struct {
unsigned int bb: 7;//(bit 0-6)
unsigned int cc: 6;//(bit 7-12)
unsigned int dd: 3;//(bit 13-15)
};
};
struct UU{
unsigned int bb: 7;//(bit 0-6)
unsigned int cc: 6;//(bit 7-12)
unsigned int dd: 3;//(bit 13-15)
};
int main() {
unsigned short int a;
U u;
u.aa = 10;
UU uu;
// 说明U取的大小为struct的大小,而不是unsigned short int的值,因为unsigned short int的大小装不下一个结构体
cout << sizeof(a) << endl; // 输出2
cout << sizeof(u) << endl; // 输出4
cout << sizeof(UU) << endl; // 输出4
cout << sizeof(uu) << endl; // 输出4
cout << sizeof(U) << endl; // 输出4
return 0;
}