我正在使用 C++ 中的一些联合,我正在尝试确定以下情况的定义行为是什么:
假设我有一个定义如下的工会:
union word_t {
struct fields_t {
unsigned int x : 8;
unsigned int y : 8;
unsigned int height : 8;
unsigned int width : 8;
} fields;
unsigned int word;
} word;
然后我尝试像这样分配给它:
word.fields.x = 300;
我在 VS2005 中对此进行了实验,它似乎屏蔽了超出范围的位并存储了有效位,而不会对其他联合字段产生任何不利影响。这就是我期望的处理方式,但我无法找到任何文档来支持它。这是定义的行为,还是特定于实现?