我一直在寻找,但找不到明确的答案.
很多人说使用工会来打字 - 双关语是不明确的和不好的做法.为什么是这样?考虑到你写入原始信息的内存并不仅仅是自己的改变,我看不出为什么它会做任何未定义的任何原因(除非它超出了堆栈的范围,但这不是一个联合问题,这将是糟糕的设计).
人们引用严格的别名规则,但在我看来,就像说你不能这样做,因为你做不到.
如果不打双关语,联盟的意义又是什么呢?我在某个地方看到它们应该被用来在不同的时间使用相同的内存位置来获取不同的信息,但为什么不在再次使用之前删除信息呢?
总结一下:
额外信息:我主要使用的是C++,但想了解它和C.特别是我正在使用工会在浮点数和原始十六进制之间进行转换以通过CAN总线发送.
在C++标准库中,我发现只有一个浮点日志方法.现在我使用log来查找二叉树中的索引级别(floor(2log(index))).
代码(C++):
int targetlevel = int(log(index)/log(2));
Run Code Online (Sandbox Code Playgroud)
我担心对于某些边元素(值为2 ^ n的元素),log将返回n-1.999999999999而不是n.0.这种恐惧是否正确?如何修改我的陈述以便始终返回正确的答案?