C++中的const限定符的使用和作用
const滿(mǎn)足定義一種變量在被設(shè)置初始值后它的值不能再次被改變。
在默認(rèn)狀態(tài)下,const對(duì)象僅在文件內(nèi)有效。
如果需要在不同文件下共享需要添加關(guān)鍵字extern,這樣只需要定義一次就夠了。
extern const int bufSize;
1、const 的引用
把引用綁定到const上,和其他對(duì)象使用一樣,最大的區(qū)別在于對(duì)常量的引用不能被用作他所修改的綁定對(duì)象:
const int ci=1024; const int &rl=ci;//正確:引用及其對(duì)應(yīng)的對(duì)象都是常量 rl=42;//錯(cuò)誤:rl是對(duì)常量的引用 int &r2=ci;//錯(cuò)誤:試圖讓一個(gè)非常量引用指向一個(gè)常量對(duì)象
ci不允許賦值,當(dāng)然也不可能通過(guò)引用去改變ci;
初始化和對(duì)const的引用
引用類(lèi)型必須與其所引用對(duì)象的類(lèi)型一直,但是有兩個(gè)例外:
1)一個(gè)是初始化常量引用時(shí)允許任意表達(dá)式作為初始值,只要該表達(dá)式的結(jié)果能轉(zhuǎn)化成引用的類(lèi)型即可。
int i=42; const int &rl=i;//正確:允許將const int&綁定到一個(gè)普通int對(duì)象上 const int &r2=42;//正確:r2是一個(gè)常量引用 const int &r3=rl*2;//正確:r3是一個(gè)常量引用 int &r4=rl*2;//錯(cuò)誤:r4是一個(gè)普通非常量引用
對(duì)const的引用可能引用一個(gè)并非const對(duì)象
int i=42; int &rl=i;//引用r1綁定到一個(gè)i對(duì)象上 const int &r2=i;//r2也綁定對(duì)象i,但不允許通過(guò)r2修改i值 r1=0;//r1并非常量,i的值修改為0 r2=0;//錯(cuò)誤:r2是一個(gè)常量引用
2、指針和const
- 與引用一樣,也可以令指針指向常量或非常量。
- 類(lèi)似與常量引用,指向常量的指針不能用于改變其所指對(duì)象的值。
- 和常量引用一樣,指向常量的指針也沒(méi)有規(guī)定其所指的對(duì)象必須是一個(gè)常量。
所以,要想存放常量對(duì)象的地址,只能使用指向常量的指針:
const double pi=3.14;// pi是個(gè)常量,它的值不能改變 double *ptr=π//錯(cuò)誤:ptr是一個(gè)普通指針 const double *cptr=π//正確:cptr可以指向一個(gè)雙精度常量 *cptr=42;//錯(cuò)誤:不能給*cptr 賦值
指針的類(lèi)型必須與其所指對(duì)象類(lèi)型一致,但是有兩個(gè)例外:
1、允許令一個(gè)指向常量的指針指向一個(gè)非常量對(duì)象;
double dval=3.14; cptr=&dval;//正確:但是不能通過(guò)cptr改變dval的值
const 指針
常量指針必須初始化,而且一旦初始化完成,則它的值(也就是存放在指針中的那個(gè)地址)就不能在改變了。
指針是一個(gè)常量時(shí),可以通過(guò)指針修改其所指對(duì)象的值,這樣做完全依賴(lài)于所指對(duì)象類(lèi)型。
*pip=2.72;//錯(cuò)誤:pip是一個(gè)指向常量的指針
if(*curErr)//如果curErr所指的對(duì)象的值不為0
{
errorHandler();
*curErr=0; //正確:把curErr所指的對(duì)象的值重置
}3、頂層const
- 頂層 const (top-level const) 表示指針本身是個(gè)常量;
- 底層 const (low-level const) 表示指針?biāo)傅膶?duì)象是一個(gè)常量;
4、constexpr和常量表達(dá)式
- 常量表達(dá)式:是指值不會(huì)改變并且在編譯過(guò)程就能得到計(jì)算結(jié)果的表達(dá)式。顯然,字面值是常量表達(dá)式,用常量表達(dá)式初始化的const對(duì)象也是常量表達(dá)式。
- constexpr 變量 :在C++11 新標(biāo)準(zhǔn)規(guī)定,允許將變量聲明為 constexpr 類(lèi)型以便編譯器來(lái)驗(yàn)證變量的值是否是一個(gè)常量表達(dá)式。
- 字面值類(lèi)型:指簡(jiǎn)單易見(jiàn)的數(shù)據(jù)類(lèi)型,比如:算術(shù)類(lèi)型、引用和指針等。
- 指針和 constexpr :必須申明,在constexpr聲明中定義了一個(gè)指針,限定符constexpr僅對(duì)指針有效,對(duì)指針?biāo)傅膶?duì)象無(wú)關(guān):
const int *p=nullptr;//p是一個(gè)指向整型常量的指針 constexpr int *q=nullptr;//q是一個(gè)指向整數(shù)的常量指針
與其他常量指針類(lèi)似,constexpr 指針既可以指向常量也可以指向一個(gè)非常量。
到此這篇關(guān)于C++中的const限定符的使用和作用的文章就介紹到這了,更多相關(guān)C++ const限定符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言結(jié)構(gòu)體字節(jié)對(duì)齊的實(shí)現(xiàn)深入分析
這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體字節(jié)對(duì)齊的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-10-10
C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用
本文主要介紹了C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
基于QT設(shè)計(jì)一個(gè)春聯(lián)自動(dòng)生成器
春節(jié)是中國(guó)最隆重的傳統(tǒng)節(jié)日,一到過(guò)年家家戶(hù)戶(hù)肯定是要貼春聯(lián);在春節(jié)前夕,會(huì)用大紅紙張,加上濃墨書(shū)寫(xiě)祝福詞語(yǔ)。本文將利用Qt框架設(shè)計(jì)一個(gè)春聯(lián)自動(dòng)生成器,需要的可以參考一下2022-01-01
C++ 實(shí)現(xiàn)旋轉(zhuǎn)蛇錯(cuò)覺(jué)的詳細(xì)代碼
這篇文章主要介紹了C++ 實(shí)現(xiàn)旋轉(zhuǎn)蛇錯(cuò)覺(jué)的詳細(xì)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
淺談c++ 字符類(lèi)型總結(jié)區(qū)別wchar_t,char,WCHAR
下面小編就為大家?guī)?lái)一篇淺談c++ 字符類(lèi)型總結(jié)區(qū)別wchar_t,char,WCHAR。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
C語(yǔ)言實(shí)現(xiàn)折半查找法(二分法)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)折半查找法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11

