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

发布于 2024-11-15 03:19:36 字数 440 浏览 2 评论 0原文

可能的重复:
“unsigned temp:3”是什么意思

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

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

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

Possible Duplicate:
What does 'unsigned temp:3' means

I encountered a problem when I'm reading the code of Clang.

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

This is the first time I saw the syntax " : 1", what's the " : 1" stands for? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

[浮城] 2024-11-22 03:19:36

它是一个 位域,这意味着该值将仅使用一位,而不是 32 位(或其他位) sizeof(unsigned) * 在您的平台上)。

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

It's a bitfield, which means that the value will only use one bit, instead of 32 (or whatever sizeof(unsigned) * <bits-per-byte> is on your platform).

Bitfields are useful for writing compact binary data structures, although they come with some performance cost as the compiler/CPU cannot update a single bit, but needs to perform AND/OR operations when reading/writing a full byte.

月下凄凉 2024-11-22 03:19:36

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
仅等于 0,1,2,..., 15。

Trigraphs and BCPLComment use 1 bit only for saving values.

For example,

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

uses only 8 bit of memory. struct S may use a single byte or memory.
sizeof(S) is 1 for the case of some implementations.
But type and temp is equal to 0,1,2 or 3. And num is
equal 0,1,2,..., 15 only.

鲸落 2024-11-22 03:19:36

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

有关说明,请参阅 C 常见问题解答

These are bit fields. The "1" is the width in bits.

See the C FAQ for an explanation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文