Toriyung

导航

C++:union类型

class和struct在C++上基本没啥区别,就只有class成员权限默认为private而struct默认为public

而union和前两者稍有不同,其最大的区别在于内部成员变量共享一块内存,只是这个内存可以存放不同的变量类型(占用内存大小选取取占用最大的成员变量的占用内存),所以每次无论对哪个成员更改都会将所有成员都修改,因为他们本来就是同一个数据。

下面用一个例子:TYPEA有两种数据成员类型,当我们对成员a赋值,输出结果如下

union TYPEA
    {
        float a;
        int b;
    };


    TYPEA a1;

    a1.a = 1.0;
    //a1.b = 2;

    std::cout << "a1.a = " <<a1.a <<std::endl;

 可以看到没什么问题

 

当我们对a赋值后再对b赋值,结果如下

    union TYPEA
    {
        float a;
        int b;
    };


    TYPEA a1;

//先赋值a再赋值b a1.a
= 1.0; a1.b = 2; std::cout << "a1.a = " << a1.a << std::endl; std::cout << "a1.b = " <<a1.b <<std::endl;

 可以看到最后赋值的b没问题,而a显然被修改了,这是因为a和b本身公用一块内存,修改了b相当于a也被改动了,由于数据类型表示方法不同,可能会是一个难以理解的数

 

 这种数据可以用来解决内存占用问题,当我们需要定义一个数据但不确定他是什么类型时可以使用,如IP地址,我们不清楚是IPV4还是IPV6,则可以用union定义两个成员变量,需要初始化时选择其一。

参考:https://segmentfault.com/a/1190000043862572

posted on 2024-04-07 16:36  Toriyung  阅读(9)  评论(0编辑  收藏  举报