unions
在存储一些信息(如一系列字节)并能够一次或一个接一个地访问它们时,使用它们有什么缺点。
示例:颜色可以用 RGBA 表示。所以颜色类型可以定义为,
typedef unsigned int RGBAColor;
然后我们可以使用位的“移位和屏蔽”来“检索或设置”RGBAColor 对象的红色、绿色、蓝色、alpha 值(就像在 Direct3D 函数中使用宏函数完成的一样,例如D3DCOLOR_ARGB()
)。
但是如果我使用联合呢?
union RGBAColor
{
unsigned int Color;
struct RGBAColorComponents
{
unsigned char Red;
unsigned char Green;
unsigned char Blue;
unsigned char Alpha;
} Component;
};
这样我就不需要总是为读取或写入颜色分量进行移位 ( <<
) 或屏蔽 ( )。&
但这有问题吗?(我怀疑这有一些问题,因为我没有看到任何人使用这种方法。)
字节序可以成为一个问题吗?如果我们总是Component
用于访问颜色组件并Color
用于访问整个事物(用于复制、分配等),那么字节序应该不是问题,对吧?
-- 编辑 -- 我发现一个旧帖子是同样的问题。所以我想这个问题有点转贴:P 抱歉。这是链接:在 C++ 中使用联合是一个好习惯吗?
根据答案,对于给定示例,联合使用似乎在 C++ 中是可以的。因为那里没有数据类型的变化,它只是访问相同数据的两种方式。如果我错了,请纠正我。谢谢。:)