一,c++函式的返回分為以下幾種情況
1)主函式main的返回值:這裡提及一點,返回0表示程式執行成功。
2)返回非引用型別:函式的返回值用於初始化在跳用函式出建立的臨時物件。用函式返回值初始化臨時物件與用實參初始化形參的方法是一樣 的。如果返回型別不是引用,在呼叫函式的地方會將函式返回值複製給臨時物件。且其返回值既可以是區域性物件,也可以是求解表示式的結果。
3)返回引用:當函式返回引用型別時,沒有複製返回值。相反,返回的是物件本身。
二,函式返回引用
1,當函式返回引用型別時,沒有複製返回值。相反,返回的是物件本身。先看兩示例,示例1如下:
const string &shorterstring(const string &s1,const string &s2)
示例2:
[cpp]view plain
copy
ostream &operator<<(ostream &output,
const
aaa &aaa)
形參和返回型別都是指向const string物件的引用,呼叫函式和返回結果時,都沒有複製這些string物件。
2,返回引用,要求在函式的引數中,包含有以引用方式或指標方式存在的,需要被返回的引數。比如:
int& abc(inta,intb,intc,int& result)
這種形式也可改寫為:
int& abc(inta,intb,intc,int*result)
但是,如下的形式是不可以的:
int& abc(inta,intb,intc)
3,千萬不要返回區域性物件的引用。當函式執行完畢時,將釋放分配給區域性物件的儲存空間。此時,對區域性物件的引用就會指向不確定的記憶體。如:
const string &manip(const string &s)
4,引用返回左值。返回引用的函式返回乙個左值。因此這樣的函式可用於任何要求使用左值的地方。示例見:c++ primer p215
5,由於返回值直接指向了乙個生命期尚未結束的變數,因此,對於函式返回值(或者稱為函式結果)本身的任何操作,都在實際上,是對那個變數的操作,這就是引入const型別的返回的意義。當使用了const關鍵字後,即意味著函式的返回值不能立即得到修改!如下**,將無法編譯通過,這就是因為返回值立即進行了++操作(相當於對變數z進行了++操作),而這對於該函式而言,是不允許的。如果去掉const,再行編譯,則可以獲得通過,並且列印形成z = 7的結果。
include
include
const int& abc(inta,intb,intc,int& result)
intmain()
三,思考:
1,什麼時候返回引用是正確的?而什麼時候返回const引用是正確的?
返回指向函式呼叫前就已經存在的物件的引用是正確的。當不希望返回的物件被修改時,返回const引用是正確的。
c 函式的返回型別
return的返回值型別必須與函式的返回值型別相同。不過需要注意的是我們很有 可能忘掉return,看下面的 includeusing namespace std int pr int a,int b 判斷兩數是否相等 void main 返回乙個值的方式和初始化乙個變數的方式完全一樣,返回的值用於...
c 函式返回引用
1 什麼是引用?引用就是變數的別名,操作乙個變數的引用也就相當於操作變數本身,這一點跟指標很類似,但是操作引用不用像操作指標一樣,利用取位址符號,很不方便。而操作引用的話,則跟操作普通變數一樣,所以c 之中更加鼓勵使用引用。2 c 函式為什麼要使用引用?c語言之中大量利用指標作為形參或者函式返回值,...
C 函式返回引用
首先需要明白 c 函式為什麼要返回引用?答 這樣就不用返回結果的副本。因為返回副本需要做賦值拷貝函式,浪費時間。這時候,實際上,返回是結果的副本,而不是結果本身。如果要返回本身,就返回引用就ok了。例1 const string manip2 const string s 此時,返回的不是ret本身...