天行健,君子以自強(qiáng)不息; 地勢(shì)坤,君子以厚德載物
有一種被稱為位域(bit-field) 的特殊的類數(shù)據(jù)成員,它可以被聲明用來存放特定數(shù)目的位。位域必須是有序數(shù)據(jù)類型。它可以有符號(hào)也可以無符號(hào)。例如:
位域標(biāo)識(shí)符后面跟有一個(gè)冒號(hào),然后是一個(gè)常量表達(dá)式指定位數(shù)。例如modified 是一個(gè)只有一位構(gòu)成的位域。 在類體中相鄰定義的位域,如果可能的話,它們會(huì)被放在同一個(gè)整數(shù)的連續(xù)位中,并以此提供空間壓縮。例如,在下列聲明中5 個(gè)位域被存儲(chǔ)在單個(gè)unsigned int 中,它首先與位域mode 相關(guān)聯(lián)。
位域在內(nèi)存中的位置是從低位向高位放置的,比如mode在Bit的最低兩位(二進(jìn)制數(shù)0b0000000000000011中兩個(gè)1的位置)。 對(duì)于位域的訪問方式與其他類數(shù)據(jù)成員相同。例如,類的私有位域只能在類的成員函數(shù)和友元中被訪問:
下面的例子說明了怎樣使用大于1 位的位域
通常情況下我們會(huì)定義一組inline 成員函數(shù),來測試每個(gè)位域成員的值。例如,類File可以定義成員isRead()和isWrite()
有了這些成員函數(shù),現(xiàn)在位域可以被聲明為類File 的私有成員。 由于取地址操作符& 不能被應(yīng)用在位域上,所以也沒有能指向類的位域的指針。位域也不能是類的靜態(tài)成員。 C++標(biāo)準(zhǔn)庫提供了一個(gè)bitset 類模板,它可以輔助操縱位的集合。在可能的情況下應(yīng)盡可能使用它來取代位域。
posted on 2009-07-16 11:50 Saga 閱讀(2245) 評(píng)論(0) 編輯 收藏 引用 所屬分類: C/C++