吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 888|回复: 13
收起左侧

[求助] c++共用体(union)有什么用

[复制链接]
youranata 发表于 2023-1-21 10:29
RT
本人大一新生,自学c++的时候看到有一种叫共用体的数据格式,书上的代码如下:
[C++] 纯文本查看 复制代码
union one4all
{
	int int_val;
	double double_val;
};

我理解的意思是,这个one4all变量可以不同时地使用点运算符接受int和double两种类型。可是这有什么实际用途呢?各位在工作中使用c++时真的会用到吗?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

seawaycao 发表于 2023-1-21 11:37
使用的比较少,就像goto语句一样也很少使用
qqLinux 发表于 2023-1-21 11:41
这个玩意是用来节省解析数据性能开销的,因为c的时候存在类型转换问题,比如说是弱类型数据指针,这个时候使用联合体+结构体就很简单了
lies2014 发表于 2023-1-21 12:39
既然定义肯定有用,只是你现在用不到而已。
拿一个例子来说,要打开一个可执行文件读取文件头内容,但32位和64位的结构是有相同也有差异的,这时用联合体定义文件头结构就比较合适了。
MarioCrane 发表于 2023-1-21 13:01
本帖最后由 MarioCrane 于 2023-1-21 13:07 编辑

首先union共享同一段内存,在某些情况下可以省去转换或移位拼接的操作,是非常方便的。
union最强大的地方在于内部再嵌套struct,可以更细化的去做解析。
在一些协议转换上经常会用到union,特别是嵌入式开发中大小端(字节序)不同的问题。如果大小端不同想直接读出下面代码中的"c"是比较麻烦的,使用union可以对"a"进行大小端转换,再直接取出"c"即可
以下代码只是个简单的示例,实际工作中遇到的情况会更为复杂

[C++] 纯文本查看 复制代码
union Protocol {
    int a:

    struct {
        char  b;
        short c;
        char  d;
    }

    struct {
        unsigned char e[4];
    }
};



david33 发表于 2023-1-21 14:06
比如你有两套寄存器,需要设置同样的值,这时候就可以通过union把它们包裹起来
怜渠客 发表于 2023-1-21 14:07
类似泛型?
erui 发表于 2023-1-21 15:18
学习了,这个语法的应用,要在实际应用中使用才能了解的更清楚。
fqy890 发表于 2023-1-21 16:21
学到了,这种用法我还是第一次见
gchq2005 发表于 2023-1-21 16:23
共用体 主要的功能就是用来节省空间用的,日常现在很少用到了,高尖端还是有用的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表