联合体union
2016-03-04 11:01
169 查看
1.union
联合是一种特殊的类。一个union可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当给某个成员赋值之后,其他成员就成未定义状态。(共享一个内存,被覆盖了)
union不能含有引用类型成员,含有构造函数和析构函数的类类型也可以作为union成员。
可以指定public、protected和private,默认是public。
不能继承和被继承。
先来看看union类型的大小:
其大小为最大成员类型的大小。
2.匿名union
匿名union不能包含受保护的成员或私有成员,也不能定义成员函数。
在匿名union定义的作用域内union的成员都可以直接访问。
联合是一种特殊的类。一个union可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当给某个成员赋值之后,其他成员就成未定义状态。(共享一个内存,被覆盖了)
union不能含有引用类型成员,含有构造函数和析构函数的类类型也可以作为union成员。
可以指定public、protected和private,默认是public。
不能继承和被继承。
先来看看union类型的大小:
#include <iostream> using namespace std; union Test{ char cv; int iv; double dv; }; int main(){ cout << sizeof(Test) << endl; //输出8 return 0; }
其大小为最大成员类型的大小。
2.匿名union
匿名union不能包含受保护的成员或私有成员,也不能定义成员函数。
在匿名union定义的作用域内union的成员都可以直接访问。
#include <iostream> using namespace std; int main(){ union{ char cv; int iv; double dv; }; cv = 'a'; return 0; }注意:如果匿名union定义在全局,必须定义成static。
#include <iostream> using namespace std; static union{ char cv; int iv; double dv; }; int main(){ cv = 'a'; return 0; }3.可以用union判断主机的字节序
#include <iostream> using namespace std; union Test{ char cv; int iv; }; int main(){ Test t; t.iv = 0xf0f1f2f3; cout << hex << t.iv << endl; //输出:f0f1f2f3 cout << hex << int(t.cv) << endl; //输出:fffffff3 return 0; }
相关文章推荐
- poj1651 区间dp
- linux rz上传与sz下载
- Java ArrayList、LinkedList和Vector的使用及性能分析
- 图像匹配之brute-force算法
- 对ESB概念的理解(转)
- HDU 1874-畅通project续(最短路Dijkstra+优先队列)
- wampserver php 设置时间
- MySQL性能调优my.cnf详解
- 带团队经验和心得
- ListView嵌套出现的问题
- PHP基础——表达式、位运算、数组
- Win8.1怎么升级最新Win10系统 Win8.1通过update升级Win10图文教程
- Reeb graph
- 使用winpcap编写sniffer,遇到的乖离
- eltiTnmuloCteehSlecxE.168
- Android开发之蓝牙详解(二)
- NanoPi 2 Fire 连接使用USB WiFi
- FreeRTOS系列第18篇---FreeRTOS队列API函数
- 各种ESB产品比较(转)
- Raid 5 故障恢复