目錄
目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網站建設、域名、雅安服務器托管、成都網站托管、企業(yè)網站設計、泉港網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。一、引用介紹
二、基本引用
三、引用做為參數(shù)
四、常引用
五、引用作為返回值
六、引用和指針的不同點
七、引用總結
對于習慣于使用C語言來進行編寫程序的朋友來說,在學習C++的過程當中遇見了引用(&)符 號,可能會有點懵,因為在C語言中的&是取地址符。但是在C++中&有著不一樣的用處,當你能夠正確掌握C++的&,它將會是你在編寫C++程序的道路上的一把提高代碼執(zhí)行效率和增強代碼質量的一把利器。
一、引用介紹? 引用不是新定義的一個變量,它是給已存在的某個變量取的別名,編譯器不會為引用變量開辟空間,它和它所引用的變量共用同一塊內存空間。
? 例如:有個人的名字叫小芳,我們給他取個名字叫芳芳,則芳芳就是小芳的別名,你叫小芳她會回應,當然叫芳芳她也會回應,實際上只有一個小芳,。所以對引用的操作就是對它所引用的變量的操作。
二、基本引用基本格式:類型標識符& 引用名 =?目標變量名
#includeusing namespace std;
int main()
{
?? ?int a = 1;
int e = 2;
?? ?int& b = a;
int& f;//錯誤 未初始化
int& b = e;//錯誤 引用其他實體
?? ?cout<< "a:address: "<< &a<< endl;//此處&不是引用,是打印a和b的地址
?? ?cout<< "b:address: "<< &b<< endl;//&a == &b說明a和b指向的是同一塊內存空間
?? ?int& c = b;//引用一個引用變量,別名的別名
?? ?int& d = c;//其中a,b,c,d全部都指向一個內存空間
?? ?c = 2;//對其中一個進行操作,則其余的都會被改變。
?? ?cout<< a<< " "<< b<< " "<< c<< " "<< d<< endl;
?? ?return 0;
}
(1)&在上面的代碼中不是求地址運算,而是起到了標識作用。
(2)引用類型必須是和目標變量是同一類型的。
(3)引用在聲名時必須初始化。
(4)一個變量可以有多個引用
(5)引用一旦引用了一個實體就不能再引用其他實體(從一而終)。
(6? ?不能建立數(shù)組的引用,因為數(shù)組是一個由若干個元素所組成的元素集合,所以無法建立一個數(shù)組的別名。
三、引用做為參數(shù)引用的一個重要作用就是作為函數(shù)的參數(shù),C語言中函數(shù)傳參一般是值傳遞,如果有大的數(shù)據(jù)作為參數(shù)傳遞的時候,往往采取指針傳遞,因為這樣可以避免較多的數(shù)據(jù)壓棧,可以提高程序的效率?,F(xiàn)在C++中也有一種具有同樣效率的方式,就是引用。
下面有幾個例子用來區(qū)分
【值傳遞】值傳遞是傳遞了原有對象的一個副本,所以調用函數(shù)可以改變副本的值,但是對源對象沒有任何影響
void Swap(int val1,? int val2)
{
? int tmp = val1;
? val1 = val2;
??val2 = tmp;
}
【引用傳遞】引用傳遞是傳遞了對象的引用,對引用的操作會改變源對象本身
void Swap(int& val1,? int& val2)
{
? int tmp = val1;
? val1 = val2;
??val2 = tmp;
}
【指針傳遞】指針傳遞參數(shù)本質上是值傳遞的方式,它所傳遞的是一個地址值,但是地址是唯一的,所以指針可以通過對地址的訪問,進而修改其內容。
void Swap(int*?pval1,? int*?pval2)
{
? int tmp = *pval1;
? *pval1 = *pval2;
? *pval2 = tmp;
}
如果既要利用引用來提高程序的效率,又擔心傳遞給函數(shù)的數(shù)據(jù)在函數(shù)中被改變,我們就可以使用常引用來解決。
四、常引用基本格式:const?類型標識符&?引用名?=?目標變量
C++中const函數(shù)的定義如下:
const 是 constant 的縮寫,本意是不變的,不易改變的意思。 在 C++ 中是用來修飾內置類型變量,自定義對象,成員函數(shù),返回值,函數(shù)參數(shù)。 C++ const 允許指定一個語義約束,編譯器會強制實施這個約束,允許程序員告訴編譯器某值是保持不變的。 如果在編程中確實有某個值保持不變,就應該明確使用const,這樣可以獲得編譯器的幫助。
所以用這種方式聲明的引用,不能通過引用對目標變量的值進行修改。
void
Test()
{
int
d1 = 1;
const
int
& d2 = d1;
d2 = 2;//錯誤,不能給常量賦值。????????
d1 = 2;
//d1改變,d2的值也會改變。
const
int
d3 = 3;
const
int
& d4 = d3;
//int& d5 = d3;錯誤,只有常引用可以引用常量
const
int
& d6 = 5;
//常量具有常性,只有常引用可以引用常量
double
d7 = 1.1;
int& d8 = d7;//d7是double類型,d8是int,d7賦值給 d8時要強制類型轉換,生成一個臨時變量,d8引用的是這個帶有常性的臨時變量,所以不能賦值。
?
const
int
& d9 = d7;//ok
}
下面"hello"串會產生一個臨時對象,而在C++中,這些臨時對象都是const類型的。因此上面的表達式就是試圖將一個const類型的對象轉換為非const類型,這是非法的。
void test(string& s)????????//錯誤,常量具有常性
,只有常引用可以引用常量
{
? ....;
}
void test(const string& s)????????//正確
{
? ....;
}
int main()
{
? test("hello!");????????
}
???????????????????????????????????????注:引用型參數(shù)在能被定義為const的情況下,盡量定義為const 。
五、引用作為返回值基本格式:類型標識符 &函數(shù)名(形參列表及類型說明)
{函數(shù)體}
引用作為函數(shù)的返回值時,函數(shù)的返回值可以理解為函數(shù)返回了一個變量(事實上,函數(shù)返回引用時,它返回的是一個指向返回值的隱式指針),因此,值為引用的函數(shù)可以用作賦值運算符的左操作數(shù)。 另外,用引用返回一個函... 全局變量,局部靜態(tài)變量,局部動態(tài)分配變量都可以作為函數(shù)返回值。
(1)不能返回局部變量的引用。因為局部變量會在函數(shù)返回后被銷毀,因此被返回的引用就成為了"無所指"的引用,程序會進入未知狀態(tài)。
(2)靜態(tài)變量或者全局變量,可以成為其他引用的初始值。
(3)不能返回函數(shù)內部new分配的內存的引用。
(4)可以返回類成員的引用,但最好是const。
int& test1()
{
?int b = 0;
?return b;
}int& test2()
{
?static?int c?= 1;
?return c;
}int e = 2;
int main()
{
?int& a?= test1();????????//錯誤(1)??int& d?= test2();? ? ? ? //正確(2)
? int&? f = e;????????????????//正確(2)
??
?cout<< a<< endl;??cout<< d?<< endl;
??cout< f?<< endl;
? cout<
d = 5;
? cout< ?return 0;
}
注:1. 不要返回一個臨時變量的引用。
2. 如果返回對象出了當前函數(shù)的作用域依舊存在,則最好使用引用返回,因為這樣更高效。
六、引用和指針的不同點引用和指針的不同點:
1. 引用在定義時必須初始化,指針沒有要求
2. 引用在初始化時引用一個實體后,就不能再引用其他實體,而指針可以在任何時候指向任何一個同類型 實體
3. 沒有NULL引用,但有NULL指針
4. 在sizeof中含義不同:引用結果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32位平臺下占 4個字節(jié))
5. 引用自加即引用的實體增加1,指針自加即指針向后偏移一個類型的大小
6. 有多級指針,但是沒有多級引用
7. 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理
8. 引用比指針使用起來相對更安全
七、引用總結(1)在引用的使用中,單純給某個變量取個別名是毫無意義的,引用的目的主要用于在函數(shù)參數(shù)傳遞中,解決大塊數(shù)據(jù)或對象的傳遞效率和空間不如意的問題。
(2)用引用傳遞函數(shù)的參數(shù),能保證參數(shù)傳遞中不產生副本,提高傳遞的效率,且通過const的使用,保證了引用傳遞的安全性。
(3)引用與指針的區(qū)別是,指針通過某個指針變量指向一個對象后,對它所指向的變量間接操作。程序中使用指針,程序的可讀性差;而引用本身就是目標變量的別名,對引用的操作就是對目標變量的操作。
(4)使用引用的時機。流操作符<<和>>、賦值操作符=的返回值、拷貝構造函數(shù)的參數(shù)、賦值操作符=的參數(shù)、其它情況都推薦使用引用。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站題目:C++引用(&)詳解-創(chuàng)新互聯(lián)
網頁URL:http://www.rwnh.cn/article40/dddheo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供Google、微信小程序、外貿網站建設、靜態(tài)網站、定制開發(fā)、全網營銷推廣
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容