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

首頁(yè) > 編程 > C++ > 正文

C++ primer 學(xué)習(xí) 之const限定符

2019-11-11 03:53:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

學(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; //error

c:對(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=π
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 洛阳市| 静海县| 本溪| 常山县| 通河县| 浠水县| 彝良县| 宜兰市| 时尚| 佛教| 宁国市| 漳浦县| 囊谦县| 渝中区| 贞丰县| 丹巴县| 南城县| 石泉县| 乳源| 鹿泉市| 敦煌市| 嘉义县| 会东县| 普定县| 湘乡市| 蒲城县| 余姚市| 永仁县| 云浮市| 马鞍山市| 马公市| 岳阳市| 鲜城| 呼和浩特市| 蓬安县| 长子县| 双鸭山市| 龙游县| 华坪县| 上饶市| 巴青县|