所以我有一个像这样的位域:
unsigned int foobar:1;
然后我使用此代码设置它
uint32_t code = loadCode();
structure.foobar = code & 2;
因此,如果code
设置为2,这是否意味着foobar设置为1,0或未定义?我使用的确切标准实际上是C ++ 11,而不是简单的C.
答案 0 :(得分:7)
当赋值运算符的左操作数是位字段时 不能代表表达式的值,得到的值 位字段是实现定义的。
同样,对于initialization:
使用无法表示的值初始化位字段时, 比特字段的结果值是实现定义的。
这是DR 1816添加的。作为修复标准中的错误的缺陷报告,它实际上是追溯性的。