使用联合对IP地址进行多种解释?

Sta*_*ked 3 c++ unions

在工作中,我们具有以下构造,可以将IP地址解释为4个字节的数组或32位整数:

union IPv4
{
    std::uint32_t ip;
    std::uint8_t  data[4];
};
Run Code Online (Sandbox Code Playgroud)

这很好用,但是在阅读了本书C ++编码标准的第97章“不要使用并集来重新解释表示形式”之后,我有点担心。本书中的示例更加阴险,我不确定它是否适用于我的代码。

我的代码是否存在任何潜在问题?

Kei*_*thB 5

根据该标准,读取除最后写入的工会成员之外的工会成员是未定义的行为。并集的设计目的是节省空间,而无需进行数据类型转换。就是说,您正在执行的操作可能会在所有主流平台和编译器上运行。