说我有一个浮点数,我想得到的单词值为:
float f = 42.0f; // 0xDEADBEEF
我知道两个选择。
std::cout << *(int*)&f;
这是未定义的行为,我不介意使用char*
作为异常(如此处所示:dereferencing type-punned pointer will break strict-aliasing rules),因为浮点数是4个字节,这很麻烦。
union {
float f;
int i;
};
f = 42.0f;
std::cout << i;
这也是我上次检查时未定义的行为,尽管此答案不同意: What is the strict aliasing rule?
我是禁用严格别名的唯一选择吗?我认为应该有一种方法可以在不进行较大变化的情况下获得基础价值(如果您好奇的话,我正在计算校验和)。