【发布时间】:2010-02-10 16:34:55
【问题描述】:
我刚刚看到一段代码sn-p,里面有一段我以前从未见过的语法。
bool start : 1; 是什么意思?我在头文件的类定义中找到了它。
【问题讨论】:
我刚刚看到一段代码sn-p,里面有一段我以前从未见过的语法。
bool start : 1; 是什么意思?我在头文件的类定义中找到了它。
【问题讨论】:
struct record {
char *name;
int refcount : 4;
unsigned dirty : 1;
};
那些是位域;该数字给出了字段的确切大小,以位为单位。 (有关详细信息,请参阅任何有关 C 的完整书籍。)位域可用于在具有多个二进制标志或其他小字段的结构中节省空间,并且它们还可用于尝试符合外部强加的存储布局。 (他们在后一项任务中的成功被一些机器从左到右分配而在其他机器上从右到左分配的事实减轻了)。
请注意,用于指定字段大小(以位为单位)的冒号表示法仅在结构(和联合)中有效;您不能使用此机制来指定任意变量的大小。
【讨论】:
这是一个位域。 : 1 表示使用一位。 参见例如http://msdn.microsoft.com/en-us/library/ewwyfdbe(VS.71).aspx
【讨论】:
这意味着 start 是 1 位宽,而普通的 bool 是 1 字节长。您可以将多个较小的变量打包成一个较大的变量,编译器将为您生成读/写所需的所有和/或代码。您会受到(明显的)性能影响,但如果使用得当,您将使用更少的内存。
【讨论】:
查看有关Bit Fields 的维基百科条目。它告诉编译器结构成员应该占用多少位。
【讨论】:
它将成员start 变成一个位域,保留1 位空间。
仅对结构/类成员有效,不能有位域变量。
【讨论】:
这是bit fields的语法
本质上,您将结构中的字段定义为只有几个位的完整字节或短字节或整数。
几个位域可能共享同一个 int,因此这种方法可以作为一种巧妙的方法来避免在构造值时进行一些位操作。
【讨论】:
这是描述bit fields的语法。这是一种将更多信息打包到更少量存储中的方法。而通常一个 bool 至少需要一个字节(可能更多)来表示,通过使用位字段,您可以使用简单的语法将多个 bool 组合成一个字节。
不过要小心。作为该语言鲜为人知的领域之一,您在使用它们时可能会遇到极端情况。例如,由此产生的数据结构可能无法在处理器类型之间移植。
【讨论】:
这是一个bit-field。但我从未尝试过在布尔值上创建位域。
【讨论】: