zoukankan      html  css  js  c++  java
  • 关于union的那些事儿

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

    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
    ", num.half.first, num.half.second);
        num.half.first = 'a'; /*联合中结构成员赋值*/
        num.half.second = 'b';
        printf("%x
    ", num.i);

    输出显示:

    使用union需要注意的问题

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

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

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

  • 相关阅读:
    Numpy 里线性代数函数
    lateral view 使用方法
    Numpy 基础函数
    Numpy 基础操作
    pandas 基础操作记录学习
    pandas向左移动非空单元格
    供应商自动记账
    SAP Smartforms 参数配置
    SAP FPM 相关包 APB_FPM_CORE
    SAP BPC 清除CUBE 中的数据
  • 原文地址:https://www.cnblogs.com/tgycoder/p/5372760.html
Copyright © 2011-2022 走看看