我已经搜索了一段时间,但找不到明确的答案.
很多人说,使用unions 来输入双关语是不明确的,也是不好的做法.这是为什么?我看不出为什么它会做任何未定义的事情,因为您将原始信息写入的内存不会自动改变(除非它超出堆栈的范围,但这不是联合问题,这将是糟糕的设计).
人们引用严格的别名规则,但在我看来,这就像是说你不能做,因为你做不到.
另外,如果不打双关语,unions 还有什么意义呢?我在某个地方看到,它们应该用来在不同的时间对不同的信息使用相同的内存位置,但是为什么不在再次使用之前直接删除这些信息呢?
总结一下:
- 为什么使用联合体进行类型双关语是不好的?
- 如果不是这样,他们又有什么意义呢?
额外信息:我主要使用C++,但我想了解一下这一点和C语言.具体地说,我使用联合在浮点数和原始祸不单行之间进行转换,以便通过CAN总线发送.