youranata 发表于 2023-1-21 10:29

c++共用体(union)有什么用

RT
本人大一新生,自学c++的时候看到有一种叫共用体的数据格式,书上的代码如下:
union one4all
{
        int int_val;
        double double_val;
};
我理解的意思是,这个one4all变量可以不同时地使用点运算符接受int和double两种类型。可是这有什么实际用途呢?各位在工作中使用c++时真的会用到吗?{:1_918:}

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"即可
以下代码只是个简单的示例,实际工作中遇到的情况会更为复杂

union Protocol {
    int a:

    struct {
      charb;
      short c;
      chard;
    }

    struct {
      unsigned char e;
    }
};


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

共用体 主要的功能就是用来节省空间用的,日常现在很少用到了,高尖端还是有用的
页: [1] 2
查看完整版本: c++共用体(union)有什么用