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

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

于 2010-07-16T08:50:15.463 回答