c++ const引用與非const引用介紹
更新時(shí)間:2013年01月31日 17:01:28 作者:
const引用是指向const對(duì)象的引用,可以讀取ref,但不能修改所以也就有將const變量賦值給非const引用是非法的,感興趣的朋友可以了解下,或許本文對(duì)你有所幫助
const引用是指向const對(duì)象的引用。
const int i = 10;
const int &ref = i;
可以讀取ref,但不能修改。這樣做是有意義的,因?yàn)閕本身就不可修改,當(dāng)然也不能通過(guò)ref來(lái)修改了。所以也就有將const變量賦值給非const引用是非法的。
int &ref1 = i; // error: nonconst reference to a const object
非const引用是指向非const類(lèi)型變量的引用。
const引用可以初始化為不同類(lèi)型的對(duì)象或者右值(如字面值常量),但非const引用不可以。
// legal for const references only
int i = 10;
const int & ref = 42;
const int & ref1 = r + i;
double d = 3.14;
const int &ref2 = d;
以綁定到不同類(lèi)型的ref2為例解釋原因,編譯器會(huì)把ref2相關(guān)的代碼轉(zhuǎn)換如下:
int temp = d;
const int &ref2 = temp; // bind ref2 to temporary
ref2實(shí)際上是綁定到一個(gè)臨時(shí)變量上,如果ref2不為const,那么按道理就可以通過(guò)修改ref2而修改d的值,但實(shí)際上d并不會(huì)改變。所以為了避免這個(gè)問(wèn)題,ref2只能是const。
非const引用只能綁定到與該引用同類(lèi)型的對(duì)象,const引用則可以綁定到不同但相關(guān)的類(lèi)型的對(duì)象或綁定到右值。
復(fù)制代碼 代碼如下:
const int i = 10;
const int &ref = i;
可以讀取ref,但不能修改。這樣做是有意義的,因?yàn)閕本身就不可修改,當(dāng)然也不能通過(guò)ref來(lái)修改了。所以也就有將const變量賦值給非const引用是非法的。
復(fù)制代碼 代碼如下:
int &ref1 = i; // error: nonconst reference to a const object
非const引用是指向非const類(lèi)型變量的引用。
const引用可以初始化為不同類(lèi)型的對(duì)象或者右值(如字面值常量),但非const引用不可以。
復(fù)制代碼 代碼如下:
// legal for const references only
int i = 10;
const int & ref = 42;
const int & ref1 = r + i;
double d = 3.14;
const int &ref2 = d;
以綁定到不同類(lèi)型的ref2為例解釋原因,編譯器會(huì)把ref2相關(guān)的代碼轉(zhuǎn)換如下:
復(fù)制代碼 代碼如下:
int temp = d;
const int &ref2 = temp; // bind ref2 to temporary
ref2實(shí)際上是綁定到一個(gè)臨時(shí)變量上,如果ref2不為const,那么按道理就可以通過(guò)修改ref2而修改d的值,但實(shí)際上d并不會(huì)改變。所以為了避免這個(gè)問(wèn)題,ref2只能是const。
非const引用只能綁定到與該引用同類(lèi)型的對(duì)象,const引用則可以綁定到不同但相關(guān)的類(lèi)型的對(duì)象或綁定到右值。
您可能感興趣的文章:
- C/C++中命名空間(namespace)詳解及其作用介紹
- C++命名空間實(shí)例解析
- C++入門(mén)(命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù),auto,范圍for)
- C++中的類(lèi)型轉(zhuǎn)換static_cast、dynamic_cast、const_cast和reinterpret_cast總結(jié)
- c++內(nèi)聯(lián)函數(shù)(inline)使用詳解
- C++11關(guān)于auto關(guān)鍵字的使用示例
- C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(133.克隆無(wú)向圖)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(133.克隆無(wú)向圖),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
詳解C++設(shè)計(jì)模式編程中責(zé)任鏈模式的應(yīng)用
這篇文章主要介紹了C++設(shè)計(jì)模式編程中責(zé)任鏈模式的應(yīng)用,責(zé)任鏈模式使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系,需要的朋友可以參考下2016-03-03
C++基于UDP協(xié)議的群聊服務(wù)器開(kāi)發(fā)實(shí)現(xiàn)
本文主要介紹了C/C++基于UDP協(xié)議的群聊服務(wù)器開(kāi)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
C語(yǔ)言實(shí)現(xiàn)學(xué)生獎(jiǎng)學(xué)金評(píng)定系統(tǒng)
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生獎(jiǎng)學(xué)金評(píng)定系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C++實(shí)現(xiàn)快速排序(Quicksort)算法
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)快速排序(Quicksort)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C語(yǔ)言詳細(xì)分析常見(jiàn)字符串函數(shù)與模擬實(shí)現(xiàn)
字符串函數(shù)(String?processing?function)也叫字符串處理函數(shù),指的是編程語(yǔ)言中用來(lái)進(jìn)行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進(jìn)行字符串拷貝,計(jì)算長(zhǎng)度,字符查找等的函數(shù)
2022-03-03 
