Использование объединения для множественной интерпретации IP-адреса? - PullRequest
2 голосов
/ 16 июля 2010

На работе у нас есть следующая конструкция, позволяющая интерпретировать IP-адрес как массив из 4 байтов или как 32-разрядное целое число:

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

Это работает нормально, но янемного взволнован после прочтения главы 97 «Не используйте союзы для переосмысления представления» книги Стандарты кодирования C ++ .Пример в книге более коварный, и я не уверен, относится ли он к моему коду.

Есть ли потенциальные проблемы с моим кодом?

Ответы [ 2 ]

3 голосов
/ 16 июля 2010

Согласно стандарту, чтение члена профсоюза, отличного от последнего написанного, является неопределенным поведением. Союзы были разработаны для экономии места, а не для преобразования типов данных. Тем не менее, то, что вы делаете, вероятно, будет работать на всех основных платформах и компиляторах.

0 голосов
/ 16 июля 2010

Нет проблем, так как репрезентация такая же, вы просто получаете доступ по-разному.

...