答案 0 :(得分:1)
显然,使用按位操作消耗更少的内存。例如,这对于嵌入式编程可能很重要。
您也可以使用std::vector<bool>
,它可以(通常也会)实现位域实现。
答案 1 :(得分:0)
Multiple adjacent bit fields are usually packed together (although this behavior is implementation-defined)
如果您希望编译器在多位字段分配期间不添加填充或执行结构对齐,则可以在单个变量中编译它们。
struct x
{
unsigned char b1 : 4; // compiler will add padding after this. adding to the structure size.
unsigned char b2 : 3; // compiler will add padding here too! sizeof(x) is 2.
}
struct y
{
unsigned char b1 : 4, : 3; // padding will be added only once. sizeof(y) is 1
}
或者,如果您想在单个变量中分配更大的位字段
struct x
{
unsigned char b1 :9; //warning: width of 'x::b1' exceeds its type
};
struct y
{
unsigned char b1 :6, :3; //no warning
};
答案 2 :(得分:0)
根据c++draft:
3 内存位置是标量类型的对象或最大值 相邻位域的序列都具有非零值 宽度。 [注:语言的各种功能,如引用和 虚函数可能涉及额外的内存位置 程序无法访问,但由implementation.- end管理 注意]两个或多个执行线程([intro.multithread])可以 访问单独的内存位置而不会相互干扰。