【发布时间】:2013-09-04 10:22:17
【问题描述】:
例如:
struct a {
uint32_t foreColor_ : 32;
uint32_t backColor_ : 32;
uint16_t lfHeight_ : 16;
uint16_t flags_: 4;
bool lfBold_: 1;
bool lfItalic_: 1;
bool lfUnderLine_: 1;
bool lfDashLine_: 1;
bool lfStrike_: 1;
bool lfSubscript_: 1;
bool lfSuperscript_: 1;
};
是 16 个字节,但是
struct a {
uint32_t foreColor_ : 32;
uint32_t backColor_ : 32;
uint16_t lfHeight_ : 16;
uint8_t flags_: 4;
bool lfBold_: 1;
bool lfItalic_: 1;
bool lfUnderLine_: 1;
bool lfDashLine_: 1; //for ime
bool lfStrike_: 1;
bool lfSubscript_: 1;
bool lfSuperscript_: 1;
};
长度为 12 个字节。
我认为 flags_ 应该具有相同的长度,但似乎不是。
为什么?
【问题讨论】:
-
对位字段使用
uint32_t之类的类型是不是有点傻? (一般来说,它们应该只在您需要完全匹配外部格式时使用,即使那样,它们的使用也是值得怀疑的。)
标签: c++ bit-fields