學(xué)習(xí)C++ PRimer也有一段時(shí)間了,一直對(duì)const這個(gè)關(guān)鍵字比較模糊,一忘記就想翻書,這次正好借著這個(gè)機(jī)會(huì),對(duì)這個(gè)關(guān)鍵字做一個(gè)總結(jié),之間還穿插了指針的知識(shí),方便后面的回顧。
(1)const的初始化 有時(shí)我們希望定義一種變量,它的值不能被改變。例如,用一個(gè)變量來(lái)表示緩沖區(qū)的大小。使用變量的好處是我們覺得緩沖區(qū)大小不再合適時(shí),很容易對(duì)其進(jìn)行調(diào)整,另一方面,也應(yīng)隨時(shí)警惕防止程序一不小心改變了這個(gè)值。
const int buffersize=512;//輸入緩沖區(qū)的大小buffersize=500;//錯(cuò)誤:試圖向const對(duì)象寫值以為const對(duì)象一旦創(chuàng)建后其值就不能再被改變,所以const對(duì)象必須被初始化。
const int i=get_size(); //運(yùn)行時(shí)初始化const int j=42; //編譯時(shí)初始化const int k; //error:k是一個(gè)未經(jīng)初始化的變量(2)const的引用 const的引用是理解的難點(diǎn),我們可以把引用綁定到const的對(duì)象上,就像綁定到其他對(duì)象上一樣,可以稱之為對(duì)常量的引用(reference to const)。C++primer里面說(shuō)其實(shí)并不存在常量引用:因?yàn)橐貌皇且粋€(gè)對(duì)象,所以我們沒(méi)有辦法讓引用本身恒定不變。我覺得這句話真正的理解是,這個(gè)引用變量本身是不能恒定不變的,因?yàn)樗梢愿淖兤浣壎ǖ囊脤?duì)象(雖然C++并不允許隨意改變引用綁定的對(duì)象),但是對(duì)常量的引用這個(gè)說(shuō)法確實(shí)成立的。在const的引用中,我們還應(yīng)該注意幾點(diǎn): a:與普通引用不同,對(duì)常量的引用不能被用作改變它所綁定的對(duì)象;
const int ci=1024; //對(duì)const的初始化,正確,引用對(duì)象const int &ri=ci; //引用及其對(duì)應(yīng)的引用對(duì)象都是常量,正確r1=42; //錯(cuò)誤,r1是常量的引用,所以r1的值不能被改變b:不可以試圖讓一個(gè)非常量引用指向一個(gè)常量引用
int &r2=ci; //errorc:對(duì)const的引用可能引用一個(gè)非const的對(duì)象,但是不可以通過(guò)常量引用去改變非常量對(duì)象的值
int i=42;int &r1=i;const int &r2=i; //錯(cuò)誤,r2可以綁定對(duì)象i,但是不允許通過(guò)r2修改i的值(3)指針和const 和引用一樣,也可以令指針指向那個(gè)常量或者非常量,指向常量的指針(pointer to const)不能用于改變其所指對(duì)象的值,其定義非常類似上文中對(duì)”常量的引用”。
const double pi=3.14;double *ptr=π //錯(cuò)誤,ptr是一個(gè)普通指針,所以其不能指向常量對(duì)象const double *cptr=π//正確,其可以指向一個(gè)雙精度常量*cptr=42;// 但是不能通過(guò)cptr賦值和常量引用一樣,指向常量的指針也沒(méi)有規(guī)定其所指向的對(duì)象必須是一個(gè)常量,可以換一個(gè)角度想一想,所謂指向常量的指針或者引用,其實(shí)不過(guò)是他們自以為是的的結(jié)果罷了,它們自覺地不去改變所指對(duì)象的值。 (4)const指針 指針是對(duì)象而引用不是,因此就像其他對(duì)象類型一樣,允許把指針本身定義為常量。常量指針(const pointer)必須初始化,而且一旦完成初始化,則它的值(也就是存放在指針中的那個(gè)地址)就不能再改變了。把*放在const之前用以說(shuō)明指針是一個(gè)常量,這樣書寫說(shuō)明不變的是指針本身這個(gè)值而不是指向的那個(gè)值。
int errNumb=0;int *const curErr=&errNumb;這里還有一個(gè)更復(fù)雜的寫法,用來(lái)定義一個(gè)指向常量對(duì)象的常量指針,*號(hào)前的const double 用來(lái)說(shuō)明這個(gè)指針?biāo)赶虻膶?duì)象的類型:
const double pi=3.14159;const double *const pip=π新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注