在Qt中,“uint isWidget : 1;”中的冒号(:)运算符的含义是什么?它等同于“uint isWidget(1)”吗?
Qt中的代码为:
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;
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
};
int unused : 22;
被拼写为int : 22
(只要它确实未使用),那么它将是等效的,尽管可能不太可读。此外,如果它根本不存在(编译器无法重用这些22位来保存postedEvents
属性的一部分),也是等效的。 - David Rodríguez - dribeasbool foo; bool bar
,这可能会占用16位甚至64位,但如果你使用位域表示法,就不会了。也就是说,这是使用位域而不是布尔值的动机。 - tobyodavies