Q为什么人们大量使用显式掩码和位操作代码,而不是声明位域?
A位域被认为是不便携的,尽管它们并不比语言的其他部分不便携。(你不知道它们能有多大,但对于类型int的值来说也是同样如此。默认情况下,你不知道它们是有符号还是无符号,但这对于类型char来说也是同样如此。你不知道它们在内存中是从左到右还是从右到左排列,但这对于所有类型的字节来说也是同样如此,并且只有当你试图符合外部强加的存储布局时才重要,而这总是不可移植的;另请参阅问题 2.12 和 20.5。)
当你还想能够将某些位集合作为一个整体进行操作(可能用于复制一组标志)时,位域是不方便的。你不能有位域数组;另请参阅问题 20.8。许多程序员怀疑编译器不会为位域生成好的代码(历史上,有时确实如此)。
使用位域的简单明了的代码肯定比等效的显式掩码指令更清晰;可惜位域不能更广泛地使用。