在工作中,我们使用以下构造来将IP地址解释为4字节的数组或32位整数:
union IPv4
{
std::uint32_t ip;
std::uint8_t data[4];
};
这很好用,但是在阅读了第97章“不要使用工会来重新解释表达”这本书C++ coding standards之后,我有点担心。书中的例子虽然更加阴险,但我不确定它是否适用于我的代码。
我的代码是否存在任何潜在问题?
答案 0 :(得分:3)
根据标准,读取除最后一个之外的联合成员是未定义的行为。联合会旨在节省空间,不用于数据类型转换。也就是说,你正在做的事情可能适用于所有主流平台和编译器。
答案 1 :(得分:0)
没问题,因为表示方式与您只是访问方式相同。