我在阅读Clang代码时遇到了问题。
class LangOptions {
public:
unsigned Trigraphs : 1; // Trigraphs in source files.
unsigned BCPLComment : 1; // BCPL-style '//' comments.
...
};
这是我第一次看到语法“:1”,“:1”代表什么?谢谢!
答案 0 :(得分:7)
这是一个bitfield,这意味着该值只会使用一位,而不是32位(或平台上的sizeof(unsigned) * <bits-per-byte>
)。
Bitfields对于编写紧凑的二进制数据结构很有用,虽然它们会带来一些性能成本,因为编译器/ CPU无法更新单个位,但在读/写完整字节时需要执行AND / OR操作。
答案 1 :(得分:2)
Trigraphs
和BCPLComment
仅使用1位来保存值。
例如,
struct S
{
signed char type : 2;
signed char num : 4;
signed char temp : 2;
};
仅使用8位内存。 struct S
可以使用单个字节或内存。
对于某些实现,sizeof(S)
为1。
但type
和temp
等于0,1,2或3. num
是。{{1}}
仅等于0,1,2,...,15。
答案 2 :(得分:2)
这些是位字段。 “1”是以位为单位的宽度。
有关说明,请参阅C FAQ。