3

職場では、IP アドレスを 4 バイトの配列または 32 ビット整数として解釈できるようにする次の構造があります。

union IPv4
{
    std::uint32_t ip;
    std::uint8_t  data[4];
};

これは問題なく動作しますが、本のC++ コーディング標準の第97章「表現を再解釈するために共用体を使用しないでください」を読んだ後、少し心配です。ただし、本の例はより陰湿であり、それが私のコードに当てはまるかどうかはわかりません。

コードに潜在的な問題はありますか?

4

2 に答える 2

5

標準によると、最後に書き込まれたもの以外の共用体のメンバーを読み取ることは、未定義の動作です。共用体はスペースを節約するように設計されており、データ型の変換ではありません。そうは言っても、あなたがやっていることはおそらくすべての主流のプラットフォームとコンパイラで動作します.

于 2010-07-16T12:12:18.537 に答える
-1

問題ありません。表現は同じなので、異なる方法で ist にアクセスするだけです。

于 2010-07-16T08:50:15.463 に答える