2011-01-28 189 views
8

“uint isWidget:1;”中的冒号(:)运算符是什么意思?在Qt中?是“uint isWidget:1;”相当于“uint isWidget(1)”?“uint isWidget:1;”中的冒号(:)运算符的含义是什么?在Qt中?

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 
}; 
+0

鉴于他们是位域一起使用在下面的答案中描述,它们可能被用作布尔值,但是编译器特别要求将它们全部打包成一个32位字(注意使用了10位,明确表示未使用)。编译器可能符合也可能不符合。像这样的打包不是强制bool的,因为在大多数CPU上,它在一个位上操作比较慢(可能涉及&-ing和| -ing值输入/输出),所以每个bool可能是一个给定的独立字符或甚至字.... – 2011-01-28 07:53:29

+0

“Qt中”uint isWidget:1;“中冒号(:)运算符的含义是什么?”应该是什么意思冒号(:)运算符在“uint isWidget:1;”在C++中?语言仍然是C++,Qt只是一组库:) – 2011-01-28 08:15:43

回答

13

这是C struct符号的一部分 - 可以在比特由属性名称后使用: numBits指定的整数字段的大小。

我必须假设相同的语法可以在C++类(我是一个C的人,但我敢肯定,这是做同样的事情在C++)