我刚看到一段代码片段,其中包含一些我以前从未见过的语法。
bool start : 1;
是什么意思?我在头文件的类定义中找到了它。
答案 0 :(得分:20)
struct record {
char *name;
int refcount : 4;
unsigned dirty : 1;
};
那些是比特字段;数字给出了字段的确切大小,以位为单位。 (有关详细信息,请参阅有关C的任何完整的书籍。)位字段可用于在具有多个二进制标志或其他小字段的结构中节省空间,并且它们还可用于尝试符合外部强加的存储布局。 (他们在后一项任务中的成功得到了缓解,因为位字段在某些机器上从左到右分配,在另一些机器上从右到左分配。)
请注意,用于以位为单位指定字段大小的冒号表示法仅在结构(和联合)中有效;你不能使用这种机制来指定任意变量的大小。
答案 1 :(得分:5)
这是一个位域。 :1表示使用一位。 例如,请参阅http://msdn.microsoft.com/en-us/library/ewwyfdbe(VS.71).aspx
答案 2 :(得分:4)
这意味着start
是1位宽,而不是1字节长的普通bool
。您可以将多个较小的变量打包到一个较大的变量中,编译器将生成为您读取/写入所需的所有和/或代码。您将获得(显着)性能提升,但是,如果使用得当,您将使用更少的内存。
答案 3 :(得分:4)
请参阅维基百科关于Bit Fields的条目。它告诉编译器结构成员应该占用多少位。
答案 4 :(得分:3)
它使成员start
成为一个位字段,保留1位空间。
它只对struct / class成员有效,你不能有一个位字段变量。
答案 5 :(得分:2)
基本上,您在结构中定义一个字段,只有一个完整字节或短或int的几位 几个位字段可以共享相同的int,因此这种方法可以用作一种聪明的方法来避免在构造值时进行一些操作。
答案 6 :(得分:2)
这是描述 bit fields 的语法。这是一种将更多信息打包到较少量存储中的方法。而通常bool至少需要一个字节(可能更多)来表示,通过使用位字段,您可以使用简单的语法将几个bool组合成一个字节。
但要小心。作为该语言鲜为人知的领域之一,使用它们时可能会遇到极端情况。例如,这样生成的数据结构可能无法在处理器类型之间移植。
答案 7 :(得分:1)
这是一个bit-field。但我从未尝试过在布尔值上创建位字段。