C C 引用作為函式的返回值

2021-10-11 15:28:26 字數 1821 閱讀 4730

語法:型別 &函式名(形參列表)
特別注意:引用作為函式的返回值時,必須在定義函式時在函式名前將&

用引用作函式的返回值的最大的好處是在記憶體中不產生返回值的副本

#include

using

namespace std;

float temp;

float

fn1(

float r)

float

&fn2

(float r)

intmain()

如果真的希望用函式的返回值來初始化乙個引用,應當先建立乙個變數,將函式的返回值賦給這個變數,然後再用該變數來初始化引用:

int x=

fn1(

5.0)

;int

&b=x;

3.不能返回區域性變數的引用。如上面的例子,如果temp是區域性變數,那麼它會在函式返回後被銷毀,此時對temp的引用就會成為「無所指」的引用,程式會進入未知狀態。

4.不能返回函式內部通過new分配的記憶體的引用。雖然不存在區域性變數的被動銷毀問題,但如果被返回的函式的引用只是作為乙個臨時變數出現,而沒有將其賦值給乙個實際的變數,那麼就可能造成這個引用所指向的空間(有new分配)無法釋放的情況(由於沒有具體的變數名,故無法用delete手動釋放該記憶體),從而造成記憶體洩漏。因此應當避免這種情況的發生

5**.當返回類成員的引用時**,最好是const引用。這樣可以避免在無意的情況下破壞該類的成員。

6.可以用函式返回的引用作為賦值表示式中的左值

func(0) = 10;是乙個賦值語句

在賦值語句中,語句左邊,也就是=號左邊,必須是可以修改的值,深入了解一下,必須是乙個可以修改的記憶體塊。重點是這個等號左邊的值必須是可以修改的。

常規(非引用)的返回型別是放在=右邊的,是不能通過位址訪問的值。不可以出現在=號左邊。

為什麼呢?因為常規的返回值是存在臨時記憶體單元中的,執行到下一條語句時,這個返回值就不存在了。return後面的表示式將結果的值計算出來,然後這個值被複製到乙個臨時位置,返回給呼叫函式,呼叫函式再到臨時位置使用這個值

解答

如果函式的返回值不是引用型別,而是值型別,那我們返回的是乙個確切的值,0 = 10;不符合左邊可以修改值的要求。

#include

using

namespace std;

int value[10]

;int error=-1

;int

&func

(int n)

intmain()

d.用引用實現多型

在c++中,引用是除了指標外另乙個可以產生多型效果的手段。也就是說乙個基類的引用可以用來繫結其派生類的例項

class

father

;//基類(父類)

class

son:public father

//son是father的派生類

son son;

//son是類son的乙個例項

father &ptr=son;

//用派生類的物件初始化基類物件的使用

特別注意:ptr只能用來訪問派生類物件中從基類繼承下來的成員。如果基類(類father)中定義的有虛函式,那麼就可以通過在派生類(類son)中重寫這個虛函式來實現類的多型。

C C 引用作為函式的返回值

語法 型別 函式名 形參列表 特別注意 1.引用作為函式的返回值時,必須在定義函式時在函式名前將 2.用引用作函式的返回值的最大的好處是在記憶體中不產生返回值的副本 includeusing namespace std float temp float fn1 float r float fn2 f...

C C 引用作為函式的返回值

語法 型別 函式名 形參列表 特別注意 1.引用作為函式的返回值時,必須在定義函式時在函式名前將 2.用引用作函式的返回值的最大的好處是在記憶體中不產生返回值的副本 返回全域性變數temp的值時,c 會在記憶體中建立臨時變數並將temp的值拷貝給該臨時變數。當返回到主函式main後,賦值語句a fn...

C C 引用作為函式的返回值

1 什麼是引用?引用就是變數的別名,操作乙個變數的引用也就相當於操作變數本身,這一點跟指標很類似,但是操作引用不用像操作指標一樣,利用取位址符號,很不方便。而操作引用的話,則跟操作普通變數一樣,所以c 之中更加鼓勵使用引用。2 c 函式為什麼要使用引用?c語言之中大量利用指標作為形參或者函式返回值,...