首先需要明白:c++函式為什麼要返回引用?
答:這樣就不用返回結果的副本。因為返回副本需要做賦值拷貝函式,浪費時間。這時候,實際上,返回是結果的副本,而不是結果本身。如果要返回本身,就返回引用就ok了。
例1:
[cpp]view plain
copy
const
string manip2(
const
string& s)
此時,返回的不是ret本身,而是ret的副本。這個副本呼叫複製建構函式,與ret一摸一樣。無法區別它和ret,帶來的效能的損失。
記住,c++函式返回引用,一定不能返回指向本地的變數的引用。否則,函式執行完畢,本地變數銷毀,那這個引用是誰的別名呢?who knows,程式只有崩潰了。
c++函式如果返回引用,就要返回在這個函式之前就存在的變數的引用才行。
例2。c++函式返回本地變數的引用
[cpp]view plain
copy
const
string& manip1(
const
string& s)
可以看出,例子1和例子2的區別是很微妙的,只有返回值型別不一樣:string和string&。如果申明了string&,那麼函式就直接返回了ret而不是ret的副本。當函式結束的時候,ret變數被銷毀,如果主函式用到了這次函式的呼叫,程式立即崩潰。我剛才試了試,確實崩潰了。
哈哈,誰都不想看到上面的那個圖吧。而且,在編譯的時候,編譯器也給出了警告:..\test.cpp:4:9: warning: reference to local variable 'ret' returned
這裡是測試**:
[cpp]view plain
copy
# include
using
namespace
std;
const
string& manip1(
const
string& s)
const
string manip2(
const
string& s)
intmain()
在過載+運算符號的時候,我就是返回的引用:
[cpp]view plain
copy
my_complex& my_complex::operator +(
const
my_complex& rhs)
由於我返回的引用在此次呼叫函式之前就已經存在(*this),那麼,我返回的引用是合適的。而我看了看不少網上其它人的實現,這裡返回的都是my_complex,不是乙個引用。也許還有其它考慮
c 函式返回引用
1 什麼是引用?引用就是變數的別名,操作乙個變數的引用也就相當於操作變數本身,這一點跟指標很類似,但是操作引用不用像操作指標一樣,利用取位址符號,很不方便。而操作引用的話,則跟操作普通變數一樣,所以c 之中更加鼓勵使用引用。2 c 函式為什麼要使用引用?c語言之中大量利用指標作為形參或者函式返回值,...
C 函式返回引用
首先需要明白 c 函式為什麼要返回引用?答 這樣就不用返回結果的副本。因為返回副本需要做賦值拷貝函式,浪費時間。這時候,實際上,返回是結果的副本,而不是結果本身。如果要返回本身,就返回引用就ok了。例1 const string manip2 const string s 此時,返回的不是ret本身...
c 函式返回引用
一,c 函式的返回分為以下幾種情況 1 主函式main的返回值 這裡提及一點,返回0表示程式執行成功。2 返回非引用型別 函式的返回值用於初始化在跳用函式出建立的臨時物件。用函式返回值初始化臨時物件與用實參初始化形參的方法是一樣 的。如果返回型別不是引用,在呼叫函式的地方會將函式返回值複製給臨時物件...