码迷,mamicode.com
首页 > 其他好文 > 详细

关于union的那些事儿

时间:2016-04-09 23:14:41      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

自从当年明月的《明朝的那些事儿》爆红之后,以***那些事儿命名的文章便层出不穷。个人认为,这样的命名通俗但具有吸引力,容易接地气。哈哈,所以我也写了几篇以《***那些事儿》的文章。当然这篇文章也是为了保持队形,勿怪,看内容。

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需要注意的问题

联合体中不能有静态成员、引用类型的成员,因为不能共享内存。

联合里不允许存放带有构造函数、析够函数、复制拷贝操作符等的类,因为他们共享内存,编译器无法保证这些对象不被破坏,也无法保证离开时调用析够函数。

使用联合可以节省内存空间,但是也有一定的风险:通过一个不适当的数据成员获取当前对象的值。

关于union的那些事儿

标签:

原文地址:http://www.cnblogs.com/tgycoder/p/5372760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!