2011-01-28 15 views
8

(uint isWidget: 1;) kolonunun (:) operatörünün anlamı nedir? Qt içinde? "Uint isWidget: 1;" "uint isWidget (1)" ile eşdeğerdir?(uint isWidget: 1;) kolonunun (:) operatörünün anlamı nedir? Qt içinde?

Qt kodu Bu C struct gösterimde parçasıdır

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

Verilen onlar bitfields olman C++ sınıfında kullanılabileceğini kabul gerekir Aşağıdaki cevaplarda açıklanmıştır, muhtemelen boole olarak kullanılıyorlar, ancak derleyici özellikle hepsini bir 32-bit kelime halinde paketlemeyi talep etti (not 10 bit kullanılmış ve 22 açık olarak kullanılmamış). Derleyici uygun olabilir veya uymayabilir. Bu gibi ambalajlama bool için zorunlu değildir çünkü çoğu CPU'larda tek bir bit üzerinde çalışmak daha yavaştır (muhtemelen/-ing ve -ing değerlerini içeri/dışarı dahil eder), böylece her bool verilen bir bağımsız char veya hatta kelime olabilir .... –

+0

"Kolonun anlamı nedir (:)" uint isWidget: 1; "in Qt içinde?" olmalı, kolonun anlamı nedir (:) "uint isWidget: 1; C++ 'da mı? Dil hala C++, Qt sadece bir dizi kütüphanedir :) –

+0

Yan yorum: eğer belki de daha az okunabilirse, son bit alanı int kullanılmamışsa: 22; 'int: 22' olarak yazılmıştır. Aslında kullanılmadığı sürece, aynı zamanda tamamen mevcut değilse (derleyici, "postedEvents" özniteliğinin bir kısmını tutmak için bu 22 biti yeniden kullanamaz) –

cevap

13

- eğer mülkiyet adından sonra bir : numBits kullanarak bit bir tamsayı alanının boyutunu belirtebilirsiniz.

aynı sözdizimi (i C biriyim ama ben bu C++ aynı şeyi yapıyor eminim)

+2

Esasen aynı - C ve C++ arasındaki farklar beklediğiniz şeydir, örn. bitfields C++ 'da özel olabilir. – MSalters

+1

evet, geçerli C++ –