c 函式返回引用

2021-06-05 11:47:00 字數 1865 閱讀 9110

**:

(1)什麼是引用?

引用就是變數的別名,操作乙個變數的引用也就相當於操作變數本身,這一點跟指標很類似,但是操作引用不用像操作指標一樣,利用取位址符號,很不方便。而操作引用的話,則跟操作普通變數一樣,所以c++之中更加鼓勵使用引用。

(2)c++函式為什麼要使用引用?

c語言之中大量利用指標作為形參或者函式返回值,這是由於值拷貝會有很大的消耗(比如傳入傳出乙個大的結構體)。所以在c++之中使用引用作為函式引數和返回值的目的和使用指標是一樣的。而且形式上更加直觀,所以c++提倡使用引用。

(3)c++返回引用?

前面提到利用引用作為函式形參和返回值的好處。

c++之中函式的返回分為以下幾種情況:

1)main的返回值:返回0表示執行成功。

2)返回非引用型別:函式的返回值用於初始化在跳出函式時候建立的臨時物件。用函式返回值來初始化臨時物件與用實參初始化形參的方法是一樣的。如果返回型別不是引用的話,在函式返回的地方,會將返回值複製給臨時物件。且其返回值既可以是區域性物件,也可以是表示式的結果。

3)返回引用:當函式返回引用型別的時候,沒有複製返回值,而是返回物件的引用(即物件本身)。

函式返回引用:實際上是乙個變數的記憶體位址,既然是記憶體位址的話,那麼肯定可以讀寫該位址所對應的記憶體區域的值,即就是「左值」,可以出現在賦值語句的左邊。

1)函式返回引用的時候,可以利用全域性變數(作為函式返回),或者在函式的形參表中有引用或者指標(作為函式返回),這兩者有乙個共同點,就是返回執行完畢以後,變數依然存在,那麼返回的引用才有意義。

exp1:

#include int global_variable; //global variable

int &f(int t1, int t2) //return the reference of the global variable "global_variable"

//可以看成 &f(int,int) = global_variable;

int main(void)

l1:執行過f(1,3),則global_variable變為4。

l2:執行過f(2,8)++,f(2,8)為10,可以執行++(表示其為左值),變為11。

l3:執行f(2,3),global_variable變為5,由於其是左值,修改了global_variable的值,為9。

exp2:

#include int &t(int a, int b, int &result)

//可以看成 &t(int,int,int &result) = result;  被呼叫時,第三個形參int &result = 第三個實參。

int &f(int a, int b, int *result)

//可以看成 &t(int,int,int *result) = *result;

int main(void)

exp3:

int &t(int a, int b)

2)由於返回的是生命期在函式退出的時候還存在的變數位址,所以函式返回值做的任何操作就相當於對這個變數位址指向的變數做的操作。如果在返回值前面加const那麼這個變數就不允許被修改。

#include const int &t(int a, int b, int &result)

int main()

小結:

(1)使用引用當作函式引數和返回值,效率更高。

(2)函式返回的物件引用,必須在呼叫函式前就已經存在,不允許返回區域性變數的引用!

(3)當不希望返回的物件被修改的時候,可以新增const。

C 函式返回引用

首先需要明白 c 函式為什麼要返回引用?答 這樣就不用返回結果的副本。因為返回副本需要做賦值拷貝函式,浪費時間。這時候,實際上,返回是結果的副本,而不是結果本身。如果要返回本身,就返回引用就ok了。例1 const string manip2 const string s 此時,返回的不是ret本身...

c 函式返回引用

一,c 函式的返回分為以下幾種情況 1 主函式main的返回值 這裡提及一點,返回0表示程式執行成功。2 返回非引用型別 函式的返回值用於初始化在跳用函式出建立的臨時物件。用函式返回值初始化臨時物件與用實參初始化形參的方法是一樣 的。如果返回型別不是引用,在呼叫函式的地方會將函式返回值複製給臨時物件...

c 函式返回引用

一,c 函式的返回分為以下幾種情況 1 主函式main的返回值 這裡提及一點,返回0表示程式執行成功。2 返回非引用型別 函式的返回值用於初始化在跳用函式出建立的臨時物件。用函式返回值初始化臨時物件與用實參初始化形參的方法是一樣 的。如果返回型別不是引用,在呼叫函式的地方會將函式返回值複製給臨時物件...