禁用位域
6.9.5 ID_forbidBitfield
位域改变了类型约定俗成的取值范围和存储方式,易造成理解上的偏差,增加维护成本,在不受特定协议限制的代码中不应使用位域。
位域与“引用”等 C++ 概念有冲突,而且标准在位域的内存布局等方面定义的不够充分,存在很多由实现定义的内容,要特别注意的是多线程访问位域还会造成数据竞争,参见 ID_bitfieldDataRaces。
示例:
struct A {
int x: 3; // Non-compliant
} a;
int& x = a.x; // Error
相关
依据
ISO/IEC 9899:1999 J.3.9(1)-implementation
ISO/IEC 9899:2011 J.3.9(1)-implementation
ISO/IEC 14882:2003 9.6(1)-implementation
ISO/IEC 14882:2003 9.6(3)
ISO/IEC 14882:2011 9.6(1)-implementation
ISO/IEC 14882:2011 9.6(3)
ISO/IEC 14882:2017 12.2.4(1)-implementation
ISO/IEC 14882:2017 12.2.4(3)