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

C++ 使用联合对IP地址进行多种解释?,c++,unions,C++,Unions,在工作中,我们采用了以下构造,可以将IP地址解释为4字节数组或32位整数: union IPv4 { std::uint32_t ip; std::uint8_t data[4]; }; 这很好,但在阅读了本书第97章“不要使用工会来重新解释代表性”后,我有点担心。书中的例子更加阴险,但我不确定它是否适用于我的代码 我的代码是否存在任何潜在问题?没有问题,因为代表是相同的,您只是以不同的方式访问它。根据标准,读取工会成员而不是上次编写的成员是未定义的行为。联合是为了节省空间而

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

union IPv4
{
    std::uint32_t ip;
    std::uint8_t  data[4];
};
这很好,但在阅读了本书第97章“不要使用工会来重新解释代表性”后,我有点担心。书中的例子更加阴险,但我不确定它是否适用于我的代码


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

没有问题,因为代表是相同的,您只是以不同的方式访问它。

根据标准,读取工会成员而不是上次编写的成员是未定义的行为。联合是为了节省空间而设计的,不需要数据类型转换。也就是说,您所做的工作可能适用于所有主流平台和编译器

这使我感兴趣。字节[0]是否始终是地址的最低有效字节?“读取联合的成员而不是最后写入的成员是未定义的行为。”哎呀,这是一个严格的限制!