•值形式的函式返回值通常都具有右值屬性,即在函式的呼叫者空間根據函式的返回型別建立乙個匿名物件,負責接收該函式的返回值
•用於接收函式返回值的匿名物件和表示式的值類似,通常只具有語句級生命期且唯讀,即所謂將亡右值
•如果函式返回的是乙個引用,那麼用於接收該返回值的就不再是乙個匿名的將亡右值物件,而是乙個引用該函式所返回引用的目標物件的引用,甚至可以是左值引用
•函式返回的左值引用可與其它任何形式的左值一樣,參與包括賦值、復合賦值、自增減等在內的各種左值運算
二.不能返回區域性變數的引用
•函式的區域性變數只具有函式級甚至塊或語句級的生命週期,函式一旦返回,所有的區域性變數即刻銷毀,即使通過返回值獲得了對它們的引用,其目標也將是未定義的
–int& foo (void)
// 危險
int* bar (void)
// 危險
int hum (void)
–int& foo (int& n)
int& bar (int* n)
int& hum (int n)
// 危險
–int* foo (int& n)
int* bar (int* n)
int* hum (int n)
// 危險
引用引數,引用返回值
函式形參詩引用,程式輸出如程式最後的注釋,表明引用s代表的是物件s2.函式中的引用 includeusing namespace std class sample sample sample a x a.x int getx 形參為引用 void disp sample s void disp sa...
引用引數與引用返回值
經常看到這樣的宣告 t func t t 這種宣告和t func t t 有什麼區別?書上的解釋是為 了提高效率,究竟是如何提高效率的呢?內部執行了什麼操作?本文通過8個小例子對引用引數 和引用返回進行了一次徹底的排查。首先看一下在類的成員函式中的引用引數和引用返回值 類定義class a 建構函式...
c 引用返回值
函式返回值時,要生成乙個值的副本。而用引用返回值時,不生成值的副本。例如,下面的程式是有關引用返回的4種形式 ch9 6.cpp include float temp float fn1 float r float fn2 float r void main void main 見圖9 9說明。圖9...