Что является недостатками использования союзы
, храня некоторую информацию как ряд байтов и способности получить доступ к ним сразу или один за другим.
Пример: Цвет может быть представлен в RGBA. Таким образом, тип цвета может быть определен как,
typedef unsigned int RGBAColor;
Тогда мы можем использовать "перемену и маскировку" битов, чтобы "восстановить или установить" красные, зеленые, синие, альфа-значения объекта RGBAColor (точно так же, как это сделано в функциях Direct3D с макро-функциями, такими как D3DCOLOR_ARGB()
).
Но что, если я использовал союз,
union RGBAColor
{
unsigned int Color;
struct RGBAColorComponents
{
unsigned char Red;
unsigned char Green;
unsigned char Blue;
unsigned char Alpha;
} Component;
};
Then I will not be needing to always do the shifting (<<
) or masking (&
) for reading or writing the color components. But is there problem with this? ( I suspect that this has some problem because I haven't seen anyone using such a method. )
Endianness может Быть broblem? Если мы всегда используем Компонент
для доступа к компонентам цвета и используют Цвет
для доступа ко всему этому (для копирования, назначения, и т.д. в целом), endianness не должен быть проблемой, правильно?
-- EDIT --
I found an old post which is the same problem. So i guess this question is kinda repost :P sorry for that. here is the link : Is it a good practice to use unions in C++?
Согласно ответам кажется, что использование союзов для данного примера в порядке в C++. Поскольку нет никакого изменения типа данных там, его всего два способа получить доступ к тем же самым данным. Пожалуйста, исправьте меня, если я неправ. Спасибо.:)