7 類-const成員
阿新 • • 發佈:2018-12-18
const成員變數
一、為什麼會引入const
有時需要定義一個不變的量,如:用一個變數來表示緩衝區大小。這時就引入了const關鍵字。
二、const變數的初始化
因為const變數一旦建立後其值就不能再被修改,所以const變數必須初始化。
/* cosnt 變數的兩種初始化方式 */ const int i = get_size(); //執行時初始化 const int j=42; //編譯時初始化 /*const變數和普通變數的關係*/ int i = 42; const int ci = i; //const變數ci可以用普通變數i賦值 int j = ci; //const變數ci可以給普通變數j賦值,相當於把ci的值拷貝一份給j,新物件和原來物件便沒有關係了
三、const物件僅在檔案內有效
預設情況下,const物件被設定為僅在檔案內有效,當多個檔案中出現了同名的const變數時,等同於分別定義了獨立的變數。
當以編譯時初始化定義一個const物件,編譯器在編譯過程中會把用到該變數的地方都替換成相應的值。
如果程式包含多個檔案,則每個用了const物件的檔案必須能訪問到它的初始值才行。為支援這一做法,同時避免對同一變數重複定義,對於const變數不管是宣告還是定義都新增extern關鍵詞。
//file.c定義並初始化一個常量,該常量能被其他檔案訪問extern const int bufsize = fcn(); //file_1.h標頭檔案 extern const int bufsize; //與file.c中定義的bufsize是同一個
四、對const的引用(簡稱 "常量引用",即引用前面加const修飾詞的引用)
把引用繫結到const物件上,就叫對常量的引用。對常量的引用不能被用作修改它所繫結的物件。
const int ci = 1024; const int &r1 = ci; //引用及其對應的物件都是常量 r1 =42; //錯誤,r1是對常量的引用 int &r2 = ci; //錯誤,不能用非常量引用指向常量物件
int i = 42;
const int &r1 = i; //允許將const int&繫結到普通物件上
總結:普通引用只能繫結到普通物件上,const引用可以繫結到普通物件或常量物件上。
五、指標和const
int i = 10; const int *p1 = &i; //const放最前面表示不能通過指標p1修改i的值,但可以修改p1的指向 const int * const p2 = &i; //const放在最前面和指標變數前,表示即不能通過指標修改i的值,也不能修改p2 的指向
六、頂層const
頂層const指,表示指標本身是常量。
底層const指,指標所指向的物件是一個常量。
int i = 0; int *const p1 = &i; //不能改變p1的值,這是一個頂層const const int ci = 42; //不能改變ci的值,這是一個頂層const const int *p2 = &ci; //允許改變p2的值,這是底層const const int *const p3 = p2; //靠右的是頂層const,靠左的是底層const const int &r = ci; //用於宣告引用的const都是底層const