将1位宽的位域设置为2意味着是设置还是取消设置位域?

时间:2017-09-21 17:21:05

标签: c++ c++11 bit-manipulation bit-fields

所以我有一个像这样的位域:

unsigned int foobar:1;

然后我使用此代码设置它

uint32_t code = loadCode();
structure.foobar = code & 2;

因此,如果code设置为2,这是否意味着foobar设置为1,0或未定义?我使用的确切标准实际上是C ++ 11,而不是简单的C.

1 个答案:

答案 0 :(得分:7)

[expr.ass]/6

  

当赋值运算符的左操作数是位字段时   不能代表表达式的值,得到的值   位字段是实现定义的。

同样,对于initialization

  

使用无法表示的值初始化位字段时,   比特字段的结果值是实现定义的。

这是DR 1816添加的。作为修复标准中的错误的缺陷报告,它实际上是追溯性的。