【发布时间】:2016-07-22 03:02:38
【问题描述】:
结构和类有offsetof 宏和sizeof 运算符。
有没有办法让位域得到类似的功能,以便查询位域成员的位偏移和位大小 ?
sizeof 可以用#define field_name_size n 模拟,但对于offsetof 恐怕用#define field_name_offset 会变得太麻烦,因为从那时起似乎必须使用一些复杂的公式来考虑所有前面的成员在位域中。
在某些情况下,它可以让人们克服手动保持代码与位字段定义同步的需要,这很容易出错。
一个例子是对位字段成员的互锁写入,其中需要使用自定义函数来写入此类成员,因为编译器不提供这种功能。
另外,我知道编译器可能会以不同的方式实现位域布局。此类宏/运算符的可用性也会减少该问题的影响。
【问题讨论】:
-
“有没有什么办法可以得到类似的位域功能,以便查询位域成员的位偏移和位大小?”我不知道一。
-
真正混乱的部分是 C 规范允许位域跨越多个存储单元。所以在 32 位系统上
struct { int x:20, y:20, z:20; }可以占用 2 个整数或 3 个整数。 -
std::vector<bool>专业化是失败的一个突出示例。
标签: c++ c bit-fields