c 函式返回引用的陷阱

2021-09-03 02:58:07 字數 435 閱讀 9126

這幾句**貌似沒有問題。實際上,在字面值字串傳入const string&的時候發生了隱式轉換,生成了乙個string的臨時值。返回的是此臨時值的引用。當**執行到cout時,臨時值已經被釋放。所以name是乙個未定義的值。

函式返回引用是個危險的操作。如果該引用指向函式的引數,會出現上述問題;如果指向區域性變數,該引用必然是個無效的引用,因為函式返回時區域性變數已經被釋放;如果該引用指向堆記憶體的變數,則無法釋放,除非你想讓它與程序共存亡。在萬不得已的情況下可以指向類成員變數,不過要考慮要在其物件釋放之前使用。

不過函式返回引用還是有其用途的。第一,可以在拷貝賦值運算子中返回*this的引用,使得外界可以連續賦值,如a=b=c;第二,可以在單例模式下靜態函式返回靜態變數的引用。

c 函式返回引用

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

C 函式返回引用

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

c 函式返回引用

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