1

したがって、次のようになります。

inline uint32 WireFormatLite::EncodeFloat(float value) {
  union {float f; uint32 i;};
  f = value;
  return i;
}

そして、私はそれを取得しません。値を送信していませんi...では、どうやって?そこで何が起こるの?

4

1 に答える 1

1

ユニオンでは、メンバーのストレージが重複しています。2 つのメンバーが同じサイズ (つまり、可能であればassert(sizeof(float) == sizeof(uint32)))配置されている場合、実際に行っていることは次のとおりです。

  1. floatの場所にa を格納します。f
  2. 同じ場所であるuint32場所からa を読み取りますi

あなたも同じように

return *reinterpret_cast<uint32 *>(&value);

(繰り返しますが、両方の型が同じサイズであり、配置要件も同じであることが確実である限り)。

于 2013-06-03T15:59:49.137 に答える