共用体,也叫联合体,在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的。union变量所占用的系统运维工作内容内存长度等于最长的成员的内存长度。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成union是什么牌子员函数。
联合里面的东西共享内存,所以静态、其他货币资金引用都不能用,因为他们不可能共享内存。此外联合里共享内存容量好不好不允许存放带有构造函数、析够函数、复制拷贝操作符等的类,因为他们共享内存,编译器共享内存容量无法保证这些对象不被系统运维的主要任务破坏,也无法保证离开时调用析够函数。
定义和声明和结构体完全一样
例共享内存容量好不好如:
union test
{
test() { }
char teacher[5];
};
定义了一个名为test的联合类型,它含有两个成员,一个为整型,成员名系统运维面试题及答案office;另一个为字符数组,数组名为t系统运维的主要任务eacher。联合定义之后,即可进行联合变量说明,被说系统运维面试题及答案明为test类unionid型的变量,可以存放整型量office或存放字符数组teacher。
匿名其他货币资金联合仅仅通知编译器它的成员变量共同享一个地址,而变量本身是直接引用的,不使用通常的点号运算符语法.
例如:
#系统运维主要做什么i nclude <iostream>
void mai系统运维主要做什么n()
{
union{
int test;
char c;
};
test=5;
c=′a′;
std::系统/运维c其他业务收入out<<i<<" "<<c;
}
正如所见到的,联合成分象声明的普通局部变量那样被引用,事实上对于程序而言,这也正是使用这其他应收款是什么科目些变量的方式.另外,尽管被定义在一个联合声明中,他们与同一个程序的任何其他局部变量具有相同的作用域级别.这意味这匿名联合内的成员的名称不能与同一个作用域内的其他一直标志符冲突.
对union怎么读匿名联合还存在如下限制:
因为匿名联合不使用点运unionist算符,所以包含在匿名联合内的元素必须是数据,不允许有成员函数,也不能包含私有或受保护位域的成员。还有,全局匿名联合必须是静态(static)的,否则就必须放在匿名名字空间中。
实用案例:
1、可以用来其他业务收入测试CPU是大端共享内存实现原理模式还是小端模式;
void chunion的用法eckCPU()
{
union MyUnion{
int a;
char c;
}test;
test.a = 1;
if (test.c == 1)
cout <union怎么读;< "little endian" <<endl;
else cout << "big endian" <<endl;
}
2、实现数据类型的强转;
union{
Unsigned int n;
Char c;
}u;
u.n=0x30;
Printf(“%c”,c);
3、和位域一起使用;
union {
Stru系统运维面试题及答案ct {
unsigned char s1:3;
unsigned char s2:3;
unsigned char s3:2;
}infor;
unsigned char u;
}k;
发表评论