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