C ++结构语法“a:b”是什么意思

如果我有一个C ++结构,定义一个64位数据字,如..

struct SMyDataWord { int Name : 40; int Colour : 24; }; 

: 40语法是什么意思…是否意味着前40位是为名称保留的,其余的24位是彩色的?

这似乎是如何使用,但我以前没有遇到过。

从C. Name结构的位Name是40位宽, Colour是24位宽。 因此你的结构至less有64位。 在我的系统上,64位将是8个字节。

是的,这是位域的语法。 它们通常用于定义映射到硬件寄存器的结构。 如果你决定使用它们,有一些事情要记住,一个是你不知道编译器是如何实现布局的,组成字段的实际字节中的sorting和填充在编译器之间可能会不同,使用相同的编译器,但使用不同的优化设置)。

这是一个位域定义。

名称是一个整数,能够存储正好40位的信息。 颜色可以存储24位。

这通常是为了节省经常需要的结构中的一些空间,或者将代码压缩到CPU容易处理的大小(在你的情况下是64位,恰好适合64位机器上的CPU寄存器)。

访问位域的代码虽然会执行得稍微慢点。

明智地使用它们 :

请记住几乎所有关于位域的内容都依赖于实现。 例如,位是从左到右还是从右到左存储取决于实际的硬件体系结构。 此外,每个编译器使用不同的成员alignment模型,这就是为什么优化的BillingRec的大小是12个字节而不是9个。不能取一个位字段的地址,也不能创build一个位数组。 最后,在大多数实现中,使用位字段会导致速度开销。 因此,当您优化您的代码时,请在决定使用它之前衡量某个优化的效果及其折衷。