ANSI C联合 - 它们真的有用吗?

ysa*_*sap 6 c unions

从昨天对某些问题的回答中,我了解到写入一个联盟成员并从另一个不同类型的成员中读取值是不可移植和不安全的,假设成员的基础对齐.所以在经过一些研究之后,我发现了一个重复这个主张的书面来源并指定了一个流行的例子 - 使用int和float的并集来查找float的二进制表示.

因此,我想知道这个假设是不安全的,我想 - 除了节省记忆(呃......)对工会有什么实际用途?

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

编辑:"不安全"这个词,由于近年来的联想,可能是一个不好的措辞选择,但我认为意图明确.

编辑2:由于这一点在答案中重复 - 节省内存是一个有效的参数.我想知道是否还有其他的东西.

dmc*_*kee 10

是.

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

这里但是,当你需要他们,需要相当罕见,你只能使用这些功能之一.

  • 我确信K&R只是想到了智能组装编码器所做的事情,当计算时它会挤出每一个字节. (4认同)