自从当年明月的《明朝的那些事儿》爆红之后,以***那些事儿命名的文章便层出不穷。个人认为,这样的命名通俗但具有吸引力,容易接地气。哈哈,所以我也写了几篇以《***那些事儿》的文章。当然这篇文章也是为了保持队形,勿怪,看内容。
union是C++里面的一个关键字,说出来真的有些不好意思了,从大学学习C++到现在读研,还真很少用过union。现在在找实习,为了夯实基础,所以对union做下整理和总结。
union的定义
union的中文名字就是共用体,也叫联合体,也是用户的一种自定义类型。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目的。
union也有自己的访问权限,默认是公有的,并且也有成员函数。
union PersonalInfo { PersonalInfo(){} PersonalInfo(int a){ age = a; } char name[10]; int age; }; PersonalInfo perInfo(5);
union和struct的区别
在结构体中各成员都有自己的内存空间,在联合体中,各成员共享一段内存(内存大小为其中最大的数据成员所占的内存)。
union number { /*定义一个联合*/ int i; struct { /*在联合中定义一个结构*/ char first; char second; }half; }num; num.i = 0x4241; /*联合成员赋值*/ printf("%c%c\n", num.half.first, num.half.second); num.half.first = ‘a‘; /*联合中结构成员赋值*/ num.half.second = ‘b‘; printf("%x\n", num.i);
输出显示:
使用union需要注意的问题
联合体中不能有静态成员、引用类型的成员,因为不能共享内存。
联合里不允许存放带有构造函数、析够函数、复制拷贝操作符等的类,因为他们共享内存,编译器无法保证这些对象不被破坏,也无法保证离开时调用析够函数。
使用联合可以节省内存空间,但是也有一定的风险:通过一个不适当的数据成员获取当前对象的值。
时间: 2024-11-07 02:17:25