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