位域声明
声明位域的形式如下: type [member_name] : width ;
type | 整数类型,决定了如何解释位域的值。类型可以是有符号整型、无符号整型。 |
member_name | 位域的名称 |
width | 位域中位的数量。宽度必须小于或等于指定类型的位宽度 |
class QObjectData {
public:
virtual ~QObjectData() = 0;
QObject *q_ptr;
QObject *parent;
QObjectList children;
uint isWidget : 1;
uint pendTimer : 1;
uint blockSig : 1;
uint wasDeleted : 1;
uint ownObjectName : 1;
uint sendChildEvents : 1;
uint receiveChildEvents : 1;
uint inEventHandler : 1; //only used if QT_JAMBI_BUILD
uint inThreadChangeEvent : 1;
uint hasGuards : 1; //true iff there is one or more QPointer attached to this object
uint unused : 22;
int postedEvents;
QMetaObject *metaObject; // assert dynamic
};
(1)在类体中相邻定义的位域,如果可能的话,它们会被放在同一个整数的连续位中,并以此提供空间压缩。在不改变数据存储空间的情况下,增加位域定义,程序可实现二进制上的兼容。
(2)位域在内存中的位置是从低位向高位放置的。
(3)由于取地址操作符& 不能被应用在位域上,所以也没有能指向类的位域的指针。位域也不能是类的静态成员。
(4)一个位域必须存储在同一个字节中,不能跨两个字节,位域的长度也不能大于一个字节的长度。
(5)位域可以无位域名,这时它只用来作填充或调整位置,无名的位域是不能使用的。