C++ 中 union 的使用
我之前总是觉得,10 万行 C++ 代码里,用到一个 union 就不错了(可能比较夸张)。但是现在我突然想到,在一类情况下,union 还是大有用武之地的。
有的时候我们需要直接对二进制数据进行操作,比如将一个结构体的信息保存到一个二进制文件里的时候,或者直接操作一些底层的东西,或者说开发一些底层的协议啥的。在之前我都是用“把结构体指针转换成 char 数组指针”,然后进行的。
比如这样的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | struct param_type { unsigned int size; /* ... */ }; void func() { param_type param; param.size = sizeof(param); /* ... */ unsigned char *ptr = (unsigned char *)¶m; /* ... */ } |
这里就是把 struct 指针转换成 char 指针,然后把它当数组操作。
其实类似的功能可以用 union 实现,而且实现得还挺方便,逻辑也清晰一些。可能 union 用得比较少,所以到了真正要用的时候,我们却忘记了……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | struct param_type { unsigned int size; /* ... */ }; union param_union { param_type param; unsigned char binary[sizeof(param)]; }; void func() { param_union pu; pu.param.size = sizeof(pu); /* ... */ // Operations with pu.binary, instead of ptr. /* ... */ } |
是不是感觉更方便了?
原创文章,转载请注明来源:http://euyuil.com/3023/union-in-cplusplus/

看了半天终于明白了。。不错不错。
union 学了之后我一次都没用过。。刚才翻开C++书,发现画了一个大大的叉,说明当时不考。
“param_” 是啥意思呢?参数?
自己起的一个名字而已……意思就是参数。