struct和union的区别和联系

union

先简单说说union,这个东西个人很少用,不过也是非常有效的一种数据结构。
union,顾名思义,翻译成中文名为“联合体”。

  • 在一个联合体内可以定义多种不同的数据类型。union中的各个成员共用一块内存
  • 共用内存的大小是和union中占空间最大的元素所占用的空间一样大,即这些数据共享同一段内存。
  • 通过这种方法,可以达到节省空间的目的。
  • 与struct相同,union的默认访问权限也是公有的,而且具有成员函数。
  • 不过需要注意的是,对union中不同成员的写操作,是会覆盖其他成员的值!
  • union中不可以包含构造函数/析构函数/拷贝构造函数/赋值运算符/虚函数的类成员变量,因为它们共享内存,编译器无法保证对象不被破坏,也无法保证离开时调用析构函数。即使用C风格形式的struct。
  • 当然,定义普通的成员函数是可以的,因为这不会使得class与C风格的struct有任何本质区别,完全可以将这样的class理解为一个C风格的struct + n个全局函数。

struct与union

union与struct有一些相似之处,但是二者有本质区别。

  • 在结构体中,各个成员有各自的内存空间,一个结构变量的总长度是各成员长度的总和
  • 在联合体中,各个成员共享一段空间,一个联合变量的长度等于各个成员中最长的长度
  • 所谓的共享,不是指把多个成员同时装入一个联合变量内,而是指该联合体可被赋予任一成员值,但是每次只能赋同一种值,赋给的新值替代旧值

二者的具体区别在于:

  • 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量。
  • 对于共用体的不同成员赋值,将会对其他成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。
  • 二者的内存分配不同。联合体的大小为其内部所有变量的最大值。

小结

请按照C中的convention去使用union,尽量不要尝试使用任何C++附加特性。
union是个好东西,union是个struct,里面所有成员共享一块内存,大小由size最大的member决定,存取成员的时候会以成员的类型来解析这块内存。

参考文章:
C++联合体union用法实例详解
union-一道经典的C++笔试题

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值