c++再学习(union使用)

39 篇文章 4 订阅
24 篇文章 0 订阅

union这个关键字很少见,但是该用到还是会用到的,所以这里介绍一下
Union和struck类似,最大的不同在于,可以存储不同类型的数据,其所占内存大小以最大的为准(换而言之,一个能装char,double和int数据的union所占内存大小为double所占内存(8字节))
union所有类型的数据共用同一段内存空间,换而言之,当你对union关键字定义的变量重新赋值时,前一个值(不管它的类型为何)都会被覆盖。
当然,由于内存地址均从低位取起,所以如果你只是写入占较小内存的数据,那么原来的数据并不会全部被覆盖。

union如何使用?

union test{
int a;
char b;
struct test{
int a,b,c,d;
}//对于这个union,其内存空间占用为struct的大小——16b
}

为什么要使用联合?
其实还是为了内存的节省,如果为了每一个不同类型的变量都分配不同的内存空间,我们的内存空间就会变得紧张,如果每一次都进行对内存的回收,这又是过于繁琐的操作。
而通过联合,我们可以反复利用一个空间,达到节省空间的目的。
当然,使用联合也会带来风险,比如说误把已经覆盖写入int的联合当作char处理,显然不会得到想要的结果。

联合有什么局限性?
联合不能用于类,确切地说,联合不能存放任何有构造函数,析构函数的结构,因为这些对象可能在共享内存的过程中无法保持完整——更重要的是无法保证这个过程中会调用析构函数,这非常危险。
与此同时,联合不能用于存放不能共享内存的数据——比如引用,再比如静态变量(静态同一时间只存在一个,不能被覆盖)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值