c++共用体(union)有什么用
RT本人大一新生,自学c++的时候看到有一种叫共用体的数据格式,书上的代码如下:
union one4all
{
int int_val;
double double_val;
};
我理解的意思是,这个one4all变量可以不同时地使用点运算符接受int和double两种类型。可是这有什么实际用途呢?各位在工作中使用c++时真的会用到吗?{:1_918:} 使用的比较少,就像goto语句一样也很少使用 这个玩意是用来节省解析数据性能开销的,因为c的时候存在类型转换问题,比如说是弱类型数据指针,这个时候使用联合体+结构体就很简单了 既然定义肯定有用,只是你现在用不到而已。
拿一个例子来说,要打开一个可执行文件读取文件头内容,但32位和64位的结构是有相同也有差异的,这时用联合体定义文件头结构就比较合适了。 本帖最后由 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;
}
};
比如你有两套寄存器,需要设置同样的值,这时候就可以通过union把它们包裹起来 类似泛型? 学习了,这个语法的应用,要在实际应用中使用才能了解的更清楚。 学到了,这种用法我还是第一次见 共用体 主要的功能就是用来节省空间用的,日常现在很少用到了,高尖端还是有用的
页:
[1]
2