所以他们有:
inline uint32 WireFormatLite::EncodeFloat(float value) {
union {float f; uint32 i;};
f = value;
return i;
}
我不明白。我们还没有看到i
的任何价值......那怎么样?这里发生了什么?
答案 0 :(得分:1)
在联盟中,成员的存储重叠。如果两个成员具有相同的大小(即,如果你可以assert(sizeof(float) == sizeof(uint32))
)和对齐,那么你真正在做的是:
float
存储到f
uint32
,的位置读取i
你可以同样
return *reinterpret_cast<uint32 *>(&value);
(同样,只要您确定两种类型的大小相同,并且具有相同的对齐要求)。