中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++引用(&)詳解-創(chuàng)新互聯(lián)

目錄

目前創(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,這樣可以獲得編譯器的幫助。

所以用這種方式聲明的引用,不能通過引用對目標變量的值進行修改。

voidTest()

{

intd1 = 1;

constint& d2 = d1;

d2 = 2;//錯誤,不能給常量賦值。????????

d1 = 2;//d1改變,d2的值也會改變。

constintd3 = 3;

constint& d4 = d3;

//int& d5 = d3;錯誤,只有常引用可以引用常量

constint& d6 = 5;//常量具有常性,只有常引用可以引用常量

doubled7 = 1.1;

int& d8 = d7;//d7是double類型,d8是int,d7賦值給 d8時要強制類型轉換,生成一個臨時變量,d8引用的是這個帶有常性的臨時變量,所以不能賦值。

?

constint& 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<

? 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)

成都seo排名網站優(yōu)化
隆回县| 中卫市| 郓城县| 双流县| 东港市| 万山特区| 夏津县| 剑川县| 齐河县| 吐鲁番市| 云龙县| 江华| 新化县| 林芝县| 班玛县| 望谟县| 西宁市| 东阳市| 沿河| 集贤县| 根河市| 阿坝| 宝坻区| 乌鲁木齐市| 蒲江县| 襄城县| 江油市| 汤阴县| 临武县| 宁城县| 满城县| 和静县| 锡林浩特市| 延边| 通渭县| 苏尼特右旗| 江城| 海淀区| 东台市| 盐边县| 大渡口区|