返回值與返回引用的問題

2022-05-18 11:33:43 字數 823 閱讀 1897

此處小論一下返回值與返回引用的問題。

先看程式:

#include using

namespace

std;

classx;

x::x(

intii)

x::~x()

void

x::modify()

#if 0x& f5() //

此處返回的是x類的引用,當函式結束,呼叫析構函式,釋放記憶體。

#endif

#if 1x f5()

#endif

void

main()

易知:執行結果:

constructor   10

constructor   20

destructor   10

destructor   10

press any key to continue

以上結果,因為呼叫的是返回值為物件而非引用的f5函式,該函式在結束時並未呼叫析構函式,故在最後接受了物件a的賦值。

當呼叫返回值是x類的引用時(將上述**中預處理 的 1 和 0 調換),可得結果:

constructor   10

constructor   20

destructor   20

destructor   10

press any key to continue

由以上分析易知,在使用返回引用的時候,一旦函式結束,則物件不復存在,自動呼叫析構函式。

還是在強調同乙個問題:不能返回區域性變數的引用。

引用引數與引用返回值

經常看到這樣的宣告 t func t t 這種宣告和t func t t 有什麼區別?書上的解釋是為 了提高效率,究竟是如何提高效率的呢?內部執行了什麼操作?本文通過8個小例子對引用引數 和引用返回進行了一次徹底的排查。首先看一下在類的成員函式中的引用引數和引用返回值 類定義class a 建構函式...

引用 引用型返回值

值形式的函式返回值通常都具有右值屬性,即在函式的呼叫者空間根據函式的返回型別建立乙個匿名物件,負責接收該函式的返回值 用於接收函式返回值的匿名物件和表示式的值類似,通常只具有語句級生命期且唯讀,即所謂將亡右值 如果函式返回的是乙個引用,那麼用於接收該返回值的就不再是乙個匿名的將亡右值物件,而是乙個引...

引用引數,引用返回值

函式形參詩引用,程式輸出如程式最後的注釋,表明引用s代表的是物件s2.函式中的引用 includeusing namespace std class sample sample sample a x a.x int getx 形參為引用 void disp sample s void disp sa...