關於const

我們希望定義這樣的一個變量,它的值不能被改變。
const int bufSize =512;

1.常量對象初始化

const對象一旦創建後其值就不能再改變,所以const對象必須初始化,不能賦值(不能改變其值)。
(1)const int bufSize =512; //編譯時初始化
const int bufSize =get_size(); //運行時初始化
(2)用一個對象去初始化另一個對象
int i=42;
const int ci =i;
int j=ci; //ci的常量特徵僅僅在執行改變ci的操作時纔會發生作用。

2.const的引用

2.1 對常量的引用不能被用作修改它所綁定的對象;
對常量的引用,所綁定的對象可能是一個常量,也可能是一個非常量;
const int ci=1024;
const int &r1=ci;
r1=42; // 錯誤;r1爲常量的引用,不能用來修改它所綁定的對象;
int &r2=ci; //錯誤;試圖讓一個非常量引用指向一個常量對象;假設此初始化合法,則可通過r2改變它引用的對象,但ci是常量,不能改變;
int i=42;
int &r1=i;
const int &r2=i; //正確;但不允許通過讓修改i的值;
r1=0; //修改i的值;
r2=0; //錯誤;

2.2 初始化const的引用

3.指向常量的指針(pointer to const)

不能通過該指針改變其所指對象的值,沒有規定那個對象的值不能通過其他途徑改變。
要想存放常量對象的地址,只能使用指向常量的指針;
Const int *pt=&ci;
3.2 指向常量的指針可以指向常量對象,也可以指向非常量對象;
pt=&i; //指向了非常量對象,但是不能通過pt改變i的值,要改變i的值,通過其他途徑。

4. 常量指針(const pointer)

4.1 常量指針指向非常量對象
int *const pt=&i; // 常量指針必須初始化
4.2 常量指針指向常量對象,因要想存放常量對象的地址,只能使用指向常量的指針,所以此時爲指向常量對象的常量指針, 此時不論是pip所指的對象的值,還是指針pip自己存儲的那個地址都不能改變。
const int *const pip-&ci;
4.3 常量指針,常量對象中對象爲指針,因常量對象必須初始化,所以常量指針必須初始化。
4.4一旦初始化完成,常量指針的值(存放在指針中的那個地址)就不能再改變了,但其指向非常量對象的值可以改變。

5. 常量成員函數(引入const成員函數)

void get_time() const;
5.1 默認情況下,隱式的this指針的類型是指向非常量對象的常量指針,即Sales_data *const this,必須初始化。
如果要初始化this,使其綁定一個常量對象,則需將this聲明爲指向常量的常量指針,即const Sales_data *const this;從而提高this的靈活性。
然而,this是隱式的,不能顯示定義。c++的做法是將const放在成員函數的參數列表之後,這樣使用const的成員函數被被稱作常量成員函數,緊跟在參數列表後面的const表示this是一個指向常量的指針。

6. 常對象

發佈了53 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章