关于冒号的简单C++语法问题

swe*_*egi 21 c++ syntax

我刚看到一段代码片段,其中包含一些我以前从未见过的语法.什么bool start : 1;意思?我在头文件中的类定义中找到它.

小智 20

struct record {
    char *name;
    int refcount : 4;
    unsigned dirty : 1;
};
Run Code Online (Sandbox Code Playgroud)

那些是比特字段; 数字给出了字段的确切大小,以位为单位.(有关详细信息,请参阅有关C的任何完整的书籍.)位字段可用于在具有多个二进制标志或其他小字段的结构中节省空间,并且它们还可用于尝试符合外部强加的存储布局.(他们在后一项任务中的成功得到了缓解,因为位字段在某些机器上从左到右分配,在另一些机器上从右到左分配).

请注意,用于以位为单位指定字段大小的冒号表示仅在结构(和联合)中有效; 你不能使用这种机制来指定任意变量的大小.

  • 参考文献:K&R1 Sec.6.7页.136-8
  • K&R2 Sec.6.9页.149-50
  • ISO秒 6.5.2.1
  • H&S Sec.5.6.5 pp.136-8


Chr*_*ard 5

这是一个位域.:1表示使用一位.例如参见http://msdn.microsoft.com/en-us/library/ewwyfdbe(VS.71).aspx