首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于C++中类定义的一个问题:1

关于C++中类定义的一个问题:1
EN

Stack Overflow用户
提问于 2011-06-10 13:32:41
回答 3查看 176关注 0票数 8

可能重复: ‘未签名的temp:3’是什么意思?

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

代码语言:javascript
复制
class LangOptions {
public:
    unsigned Trigraphs         : 1;  // Trigraphs in source files.
    unsigned BCPLComment       : 1;  // BCPL-style '//' comments.
    ...
};

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-10 13:34:39

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

Bitfield对于编写紧凑的二进制数据结构很有用,尽管它们带来了一些性能代价,因为编译器/CPU不能更新一位,但是在读取/写入整个字节时需要执行和/或操作。

票数 7
EN

Stack Overflow用户

发布于 2011-06-10 13:34:19

TrigraphsBCPLComment只使用1位来保存值。

例如,

代码语言:javascript
复制
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仅等于0,1,2,.

票数 2
EN

Stack Overflow用户

发布于 2011-06-10 13:34:34

这些都是位字段。"1“是以位表示的宽度。

有关解释,请参见C常见问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6307070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档