国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ primer 學習 之const限定符

2019-11-11 04:23:27
字體:
來源:轉載
供稿:網友

學習C++ PRimer也有一段時間了,一直對const這個關鍵字比較模糊,一忘記就想翻書,這次正好借著這個機會,對這個關鍵字做一個總結,之間還穿插了指針的知識,方便后面的回顧。

(1)const的初始化 有時我們希望定義一種變量,它的值不能被改變。例如,用一個變量來表示緩沖區的大小。使用變量的好處是我們覺得緩沖區大小不再合適時,很容易對其進行調整,另一方面,也應隨時警惕防止程序一不小心改變了這個值。

const int buffersize=512;//輸入緩沖區的大小buffersize=500;//錯誤:試圖向const對象寫值

以為const對象一旦創建后其值就不能再被改變,所以const對象必須被初始化。

const int i=get_size(); //運行時初始化const int j=42; //編譯時初始化const int k; //error:k是一個未經初始化的變量

(2)const的引用 const的引用是理解的難點,我們可以把引用綁定到const的對象上,就像綁定到其他對象上一樣,可以稱之為對常量的引用(reference to const)。C++primer里面說其實并不存在常量引用:因為引用不是一個對象,所以我們沒有辦法讓引用本身恒定不變。我覺得這句話真正的理解是,這個引用變量本身是不能恒定不變的,因為它可以改變其綁定的引用對象(雖然C++并不允許隨意改變引用綁定的對象),但是對常量的引用這個說法確實成立的。在const的引用中,我們還應該注意幾點: a:與普通引用不同,對常量的引用不能被用作改變它所綁定的對象;

const int ci=1024; //對const的初始化,正確,引用對象const int &ri=ci; //引用及其對應的引用對象都是常量,正確r1=42; //錯誤,r1是常量的引用,所以r1的值不能被改變

b:不可以試圖讓一個非常量引用指向一個常量引用

int &r2=ci; //error

c:對const的引用可能引用一個非const的對象,但是不可以通過常量引用去改變非常量對象的值

int i=42;int &r1=i;const int &r2=i; //錯誤,r2可以綁定對象i,但是不允許通過r2修改i的值

(3)指針和const 和引用一樣,也可以令指針指向那個常量或者非常量,指向常量的指針(pointer to const)不能用于改變其所指對象的值,其定義非常類似上文中對”常量的引用”。

const double pi=3.14;double *ptr=π //錯誤,ptr是一個普通指針,所以其不能指向常量對象const double *cptr=π//正確,其可以指向一個雙精度常量*cptr=42;// 但是不能通過cptr賦值

和常量引用一樣,指向常量的指針也沒有規定其所指向的對象必須是一個常量,可以換一個角度想一想,所謂指向常量的指針或者引用,其實不過是他們自以為是的的結果罷了,它們自覺地不去改變所指對象的值。 (4)const指針 指針是對象而引用不是,因此就像其他對象類型一樣,允許把指針本身定義為常量。常量指針(const pointer)必須初始化,而且一旦完成初始化,則它的值(也就是存放在指針中的那個地址)就不能再改變了。把*放在const之前用以說明指針是一個常量,這樣書寫說明不變的是指針本身這個值而不是指向的那個值。

int errNumb=0;int *const curErr=&errNumb;

這里還有一個更復雜的寫法,用來定義一個指向常量對象的常量指針,*號前的const double 用來說明這個指針所指向的對象的類型:

const double pi=3.14159;const double *const pip=π
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 婺源县| 汨罗市| 胶南市| 青冈县| 吴忠市| 黄龙县| 屏南县| 土默特右旗| 钟山县| 东安县| 沈丘县| 资源县| 尚志市| 滨州市| 界首市| 繁峙县| 称多县| 老河口市| 濮阳县| 塔城市| 临沂市| 东城区| 明溪县| 堆龙德庆县| 上思县| 蕲春县| 韩城市| 扎鲁特旗| 佛冈县| 天峨县| 丹阳市| 永年县| 健康| 马尔康县| 筠连县| 兴安盟| 绥中县| 平舆县| 巫溪县| 刚察县| 和政县|