《c++ primer》第二章 const限定符
1.const物件的初始化:有時我們希望定義這樣一種變數,它的值不能夠被改變。此時我們可以用const限定符。由於const物件一旦建立之後值不能夠再改變,因此const物件必須初始化。如果用一個物件去初始化另一個物件,那麼它們是不是const都無所謂。
2.預設狀態下,const物件僅在檔案內有效。但如果希望別的檔案都能夠引用該const物件,那麼對於const變數不管宣告還是定義都新增extern關鍵字。
3.const的引用。把引用繫結到const物件上,就像繫結到其他物件上一樣,我們稱之為對常量的引用。對const的引用可能引用一個非cosnt的物件。
int i=42; int &r1=i; const int &r2=i; r1=0; r2=0;//錯誤,但是將r2繫結到i是合法行為。只是由於r2是const型別的引用,因此不能通過r2改變i的值。
4.指標和const
(1)指向常量的指標不能夠用於改變其物件的值。(const double * ptr)//指的是常量
想要存放常量的地址,只能使用指向常量的指標。 (也就是說指向const double的型別的指標必須是const double型別)
指向常量的指標沒有規定所指的物件必須是一個常量。(也就是說const double型別的指標不一定指向 const double型別的常量)
const double* ptr指向的是不是const 型別的都可以。但是 const double型別的常量必須用cosnt double* 的指標。
(2)常量指標 必須初始化,初始化完成,它的值就不能再改變了。把 *放在const前,說明指標是一個常量。(double *const ptr)
const指標不能賦值給普通指標。
5.頂層const
用名詞頂層const表示指標本身是個常量;用名詞底層const表示指標所指的物件是個常量。
執行拷貝操作時,頂層const不受什麼影響。
另一方面,底層const的限制不能忽視。拷入與拷出物件必須具有相同的底層const資格。