关于C ++中类定义的问题“:1”

时间:2011-06-10 13:32:42

标签: c++ clang

  

可能重复:
  What does 'unsigned temp:3' means

我在阅读Clang代码时遇到了问题。

class LangOptions {
public:
    unsigned Trigraphs         : 1;  // Trigraphs in source files.
    unsigned BCPLComment       : 1;  // BCPL-style '//' comments.
    ...
};

这是我第一次看到语法“:1”,“:1”代表什么?谢谢!

3 个答案:

答案 0 :(得分:7)

这是一个bitfield,这意味着该值只会使用一位,而不是32位(或平台上的sizeof(unsigned) * <bits-per-byte>)。

Bitfields对于编写紧凑的二进制数据结构很有用,虽然它们会带来一些性能成本,因为编译器/ CPU无法更新单个位,但在读/写完整字节时需要执行AND / OR操作。

答案 1 :(得分:2)

TrigraphsBCPLComment仅使用1位来保存值。

例如,

struct S
{
   signed char type : 2;
   signed char num  : 4;
   signed char temp : 2;
};

仅使用8位内存。 struct S可以使用单个字节或内存。 对于某些实现,sizeof(S)为1。 但typetemp等于0,1,2或3. num是。{{1}} 仅等于0,1,2,...,15。

答案 2 :(得分:2)

这些是位字段。 “1”是以位为单位的宽度。

有关说明,请参阅C FAQ