c - ANSI C union ——它们真的有用吗?

标签 c unions

从昨天对某个问题的回答中,我了解到写入一个 union 成员并从另一个不同类型的成员读取值是不可移植且不安全的,假设成员基本对齐。因此,经过一些研究后,我发现了一份书面资料,其中重复了这一说法并指定了一个流行的示例 - 使用 int 和 float 的 union 来查找 float 的二进制表示。

因此,我想知道这个假设是不安全的 - 除了节省内存(duh...) union 还有什么实际用途?

注意:即在标准 C 下。显然,对于特定的实现,规则是预先知道的并且可以利用。

编辑:“不安全”这个词,由于近年来的联想,可能是一个糟糕的措辞选择,但我认为意图很明确。

编辑 2:由于这一点在答案中重复 - saving memory 是一个有效的论点。我想知道是否还有其他东西。

最佳答案

是的。

提供了一种创建通用容器的方法。但是,要获得多态行为,您必须自己实现 vtable 或类型切换...

但是,其中一个功能,您只在需要时才使用它们,而且很少需要。

关于c - ANSI C union ——它们真的有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3464448/

相关文章:

c++ - Union 在内存中的存储

C++ union 赋值,有什么好办法吗?

c - 使用冒泡排序排列字符数组

c - 为什么这个在 VS 2015 中编译而不是在 IDEOne 中编译?

c - 如何在 bmp 图像上叠加文本或标记

无法将 union 成员指定为 NULL

具有非连续布局的 C 位域元素

c - 是否可以创建一个可以以不同结构运行的函数(用 C 语言)?

c - 通过指针反转顺序

c - 在 C 中格式化非常大的数字