上一篇:http://www.BkJia.com/kf/201201/116702.html
18.7.1 位域
可以聲明一種特殊的類數據成員,稱為位域(bit-field),來保存特定的位數。當程序需要將二進制數據傳遞給另一程序或硬件設備的時候,通常使用位域。
位域在內存中的布局是機器相關的。
位域必須是整體數據類型,可以是signed或unsigned。通過在成員名後面接一個冒號以及指定位數的常量表達式,指出成員是一個位數。
[cpp] typedef unsigned int Bit;
class File{
Bit mode:2;
Bit modified:1;
Bit prot_owner:3;
};
typedef unsigned int Bit;
class File{
Bit mode:2;
Bit modified:1;
Bit prot_owner:3;
};通常最好將位域設為unsigned。存儲在signed類型中的位域的行為由實現定義。
使用位域
用與類的其他數據成員相同的方式訪問位域。例如,作為類的private成員的位域只能從成員函數的定義和類的友元中訪問。
[cpp] File file=File();
file.mode=1;
file.modified=11;
File file=File();
file.mode=1;
file.modified=11;定義了位域成員的類通常也定義一組內聯成員函數來測試和設置位域的值。
通常使用內置按位操作符操縱超過一位的位域。
地址操作符(&)不能應用於位域,所以不可能有引用類位域的指針,位域也不能是類的靜態成員。
18.7.2 volatile限定符
當可以用編譯器的控制或檢測之外的方式改變對象值的時候,應該將對象聲明為volatile。關鍵字volatile是給編譯器的指示,指出對這樣的對象不應該執行優化。
用與const限定符相同的方式使用volatile限定符。volatile限定符是一個對類型的附加修飾符。
[cpp] volatile int i;
volatile TheClass tc100;
volatile int arr[10];
volatile int i;
volatile TheClass tc100;
volatile int arr[10];可以聲明volatile指針,指向volatile對象的指針,以及指向volatile對象的volatile指針。
合成的復制控制不適用於volatile對象
對待const和volatile的一個重要區別是,不能使用合成的復制和賦值操作符從volatile對象進行初始化賦值。合成的復制控制成員接受const形參,這些形參是對類類型的const引用,但是不能將volatile對象傳遞給普通引用或const引用。
如果類希望允許復制volatile對象,或者,類希望允許從volatile操作數或對volatile操作數進行賦值,它必須定義自己的復制構造函數和/或賦值操作符版本。
摘自 xufei96的專欄