c 函式返回引用

2021-07-03 19:38:48 字數 1989 閱讀 5821

函式返回值和返回引用是不同的

函式返回時會產生乙個臨時變數作為函式返回值的副本,而返回引用時不會產生值的副本,既然是引用,那引用誰呢?這個問題必須清楚,否則將無法理解返回引用到底是個什麼概念。以下是幾種引用情況:

1,引用函式的引數,當然該引數也是乙個引用

const string &shorterstring(const string &s1,const string &s2)

當函式執行完畢,程式將釋放分配給區域性物件的儲存空間。此時,對區域性物件的引用就會指向不確定的記憶體。

(2012-07-29 22:21:45)

標籤:分類:

c.plus

1)什麼是引用?

引用就是變數的別名,操作乙個變數的引用也就相當於操作變數本身,這一點跟指標很類似。

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

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

(3)c++返回引用?

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

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

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

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

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

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

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

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

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

#include

using namespace std;

//一般資料型別測試

//返回區域性變數

template

t1 & funtestdatatype(t1 b)

int fun_a()

int main()

總結1、引用其實本質就是位址

2、當函式返回值型別為引用時,一般就用引用型別去接收,或者就使用了引用的作用,如果用非引用型別接受,就等於將函式返回的引用的資料值,複製給了該接收物件,和函式返回非引用型別是一樣的效果。

3、當函式返回值型別為引用時,如果不考慮接收問題,則有乙個特性,則是可以直接操作該函式返回的引用,如放在=左面 +=等.

4、錯象:當在函式內部定義了區域性變數(本質就是為一段記憶體取了乙個名字,並占用),出了這個函式,這個區域性變數不可再使用,也就是這個區域性變數並不指向任何乙個記憶體了,但是這個區域性變數原來所指的記憶體如果沒有被系統重新分配,裡面的值仍然沒有變,如果有乙個引用指向該區域性變數,在區域性變數被釋放記憶體以後,如果沒有被系統重新將這段記憶體分配,那麼其值仍可用。

5、不可以將常引用當作函式返回值返回.

6、用引用作函式引數和返回值型別的好處。直接是位址操作,不需要將值一一複製給形參,

7、返回值不需要有臨時變數的存在,也不需要呼叫任何建構函式。節省了開銷

8、一般當函式形參需要複雜型別的資料時,最好用引用,可以節省系統開銷,

9、能用常引用的地方盡量用常引用。

10、如果非要返回乙個區域性變數的引用,可以new 型別(初值) 申請乙個堆記憶體的臨時變數,這樣只要不delete釋放,那麼在程式退出之前記憶體就不會被釋放,直到不再使用時便可delete掉.

c 函式返回引用

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

C 函式返回引用

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

c 函式返回引用

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