Toriyung

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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   Toriyung  阅读(48)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示