代码之家  ›  专栏  ›  技术社区  ›  swegi

关于结肠的简单C++语法问题

  •  21
  • swegi  · 技术社区  · 14 年前

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

    8 回复  |  直到 14 年前
        1
  •  20
  •   serialx    14 年前
    struct record {
        char *name;
        int refcount : 4;
        unsigned dirty : 1;
    };
    

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

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

    • 参考文献:K&R1秒。6.7 pp.136~8
    • K和R2秒。6.9 pp.149—50
    • ISO SEC。5.5.2.1
    • 美国证券交易委员会5.65.pp.136~8
        2
  •  5
  •   Chris Card    14 年前

    它是一个比特场。:1表示使用了一位。 例如,请参见 http://msdn.microsoft.com/en-us/library/ewwyfdbe(VS.71).aspx

        3
  •  4
  •   Blindy    14 年前

    这意味着 start 是1位宽,与正常值相反 bool 长度为1字节。您可以将多个较小的变量打包成较大的变量,编译器将生成为您读/写该变量所需的所有和/或代码。您将获得(明显的)性能冲击,但如果使用正确,您将使用更少的内存。

        4
  •  4
  •   schnaader    14 年前

    参见维基百科关于 Bit Fields . 它告诉编译器结构成员应该占用多少位。

        5
  •  3
  •   unwind    14 年前

    它使成员 start 进入位字段,保留1位空间。

    它只对结构/类成员有效,不能有位字段变量。

        6
  •  2
  •   shoosh    14 年前

    这是用于 bit fields

    本质上,您在结构中定义一个字段,使其只有整字节、短字节或int的几位。
    几个位字段可能共享相同的int,因此可以将此方法用作避免在构造值时进行某些位操作的巧妙方法。

        7
  •  2
  •   Avi    14 年前

    这是用来描述的语法 bit fields . 这是一种将更多信息打包到较小的存储空间中的方法。然而,通常一个bool至少需要一个字节(可能更多)来表示,通过使用位字段,您可以用一个简单的语法将几个bool组合成一个字节。

    不过要小心。作为语言中一个鲜为人知的领域,在使用时可能会遇到一些小情况。例如,由此生成的数据结构可能在处理器类型之间不可移植。

        8
  •  1
  •   Tadeusz Kopec for Ukraine yespbs    14 年前

    这是一个 bit-field . 但我从未尝试过在布尔值上生成位字段。