osg*_*sgx 13 c c++ struct c99 bit-fields
位结构字段的最大位宽是多少?
struct i { long long i:127;}
Run Code Online (Sandbox Code Playgroud)
我可以在struct中定义一个位字段,位域大小最多为128位,或256位,或更大?有一些超宽的矢量类型,如sse2(128位),avx1/avx2(256位),avx-512(512位用于下一个Xeon Phis)寄存器; 以及gcc中的__int128等扩展名.
Ste*_*non 20
C99§6.7.2.1,第3段:
指定位字段宽度的表达式应为整数常量表达式,其具有非负值,如果省略冒号和表达式,则该非负值不得超过指定类型的对象中的位数.如果该值为零,则声明不应具有声明者.
C++0xa§9.6,第1段:
... constant-expression应为具有大于或等于零的值的整数常量表达式.积分常数表达式的值可能大于位域类型的对象表示(3.9)中的位数; 在这种情况下,额外的比特用作填充比特,并且不参与比特字段的值表示(3.9).
所以在C中你完全不能这样做,而在C++中它不会做你想要的.