c函數(shù)返回引用

c函數(shù)返回引用

ID:34014238

大小:34.50 KB

頁(yè)數(shù):7頁(yè)

時(shí)間:2019-03-03

c函數(shù)返回引用_第1頁(yè)
c函數(shù)返回引用_第2頁(yè)
c函數(shù)返回引用_第3頁(yè)
c函數(shù)返回引用_第4頁(yè)
c函數(shù)返回引用_第5頁(yè)
資源描述:

《c函數(shù)返回引用》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、舉一個(gè)簡(jiǎn)單的例子int&B(int&n){n++;returnn;}intmain(){inta=10;int&b=B(a);//調(diào)用B,傳遞的是a的引用//到了B裏,n就是指a,//returnn;就相當(dāng)是returna;//返回到b的就是a的引用,b就是a//對(duì)n和b的操作會(huì)直接影響a,因爲(wèi)它們是同一個(gè)東西.cout<

2、是一個(gè)值"副本",沒(méi)有引用任何東西,對(duì)於原始的a沒(méi)有任何影響C++中,返回引用是一個(gè)比較晦澀的概念。在書(shū)中,對(duì)此僅僅做了一個(gè)一般的介紹,并沒(méi)有展開(kāi)。我覺(jué)得有必要對(duì)此進(jìn)行一定的展開(kāi)。(1)首先,返回引用,要求在函數(shù)的參數(shù)中,包含有以引用方式或指針?lè)绞酱嬖诘?,需要被返回的參?shù)。比如:int&abc(inta,intb,intc,int&result){?result=a+b+c;?returnresult;}這種形式也可改寫(xiě)為:int&abc(inta,intb,intc,int*result){?*result=a+b+c;?return*result;}但是,如

3、下的形式是不可以的:int&abc(inta,intb,intc){?return?a+b+c;}(2)由于返回值直接指向了一個(gè)生命期尚未結(jié)束的變量,因此,對(duì)于函數(shù)返回值(或者稱(chēng)為函數(shù)結(jié)果)本身的任何操作,都在實(shí)際上,是對(duì)那個(gè)變量的操作,這就是引入const類(lèi)型的返回的意義。當(dāng)使用了const關(guān)鍵字后,即意味著函數(shù)的返回值不能立即得到修改!如下代碼,將無(wú)法編譯通過(guò),這就是因?yàn)榉祷刂盗⒓催M(jìn)行了++操作(相當(dāng)于對(duì)變量z進(jìn)行了++操作),而這對(duì)于該函數(shù)而言,是不允許的。如果去掉const,再行編譯,則可以獲得通過(guò),并且打印形成z=7的結(jié)果。include

4、am>includeconstint&abc(inta,intb,intc,int&result){?result=a+b+c;?returnresult;}intmain(){?inta=1;intb=2;intc=3;?intz;?abc(a,b,c)++;?cout<<"z="<

5、參數(shù)、返回值,甚至函數(shù)的定義體。const是constant的縮寫(xiě),“恒定不變”的意思。被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。所以很多C++程序設(shè)計(jì)書(shū)籍建議:“Useconstwheneveryouneed”。1.用const修飾函數(shù)的參數(shù)如果參數(shù)作輸出用,不論它是什么數(shù)據(jù)類(lèi)型,也不論它采用“指針傳遞”還是“引用傳遞”,都不能加const修飾,否則該參數(shù)將失去輸出功能。const只能修飾輸入?yún)?shù):如果輸入?yún)?shù)采用“指針傳遞”,那么加const修飾可以防止意外地改動(dòng)該指針,起到保護(hù)作用。例如StringCopy函數(shù):void

6、StringCopy(char*strDestination,constchar*strSource);其中strSource是輸入?yún)?shù),strDestination是輸出參數(shù)。給strSource加上const修飾后,如果函數(shù)體內(nèi)的語(yǔ)句試圖改動(dòng)strSource的內(nèi)容,編譯器將指出錯(cuò)誤。如果輸入?yún)?shù)采用“值傳遞”,由于函數(shù)將自動(dòng)產(chǎn)生臨時(shí)變量用于復(fù)制該參數(shù),該輸入?yún)?shù)本來(lái)就無(wú)需保護(hù),所以不要加const修飾。例如不要將函數(shù)voidFunc1(intx)寫(xiě)成voidFunc1(constintx)。同理不要將函數(shù)voidFunc2(Aa)寫(xiě)成voidFunc2(c

7、onstAa)。其中A為用戶(hù)自定義的數(shù)據(jù)類(lèi)型。對(duì)于非內(nèi)部數(shù)據(jù)類(lèi)型的參數(shù)而言,象voidFunc(Aa)這樣聲明的函數(shù)注定效率比較底。因?yàn)楹瘮?shù)體內(nèi)將產(chǎn)生A類(lèi)型的臨時(shí)對(duì)象用于復(fù)制參數(shù)a,而臨時(shí)對(duì)象的構(gòu)造、復(fù)制、析構(gòu)過(guò)程都將消耗時(shí)間。為了提高效率,可以將函數(shù)聲明改為voidFunc(A&a),因?yàn)椤耙脗鬟f”僅借用一下參數(shù)的別名而已,不需要產(chǎn)生臨時(shí)對(duì)象。但是函數(shù)voidFunc(A&a)存在一個(gè)缺點(diǎn):“引用傳遞”有可能改變參數(shù)a,這是我們不期望的。解決這個(gè)問(wèn)題很容易,加const修飾即可,因此函數(shù)最終成為voidFunc(constA&a)。以此類(lèi)推,是否應(yīng)將void

8、Func(intx)改寫(xiě)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。