引用引數,引用返回值

2022-09-04 10:57:05 字數 2251 閱讀 8839

函式形參詩引用,程式輸出如程式最後的注釋,表明引用s代表的是物件s2.

//

函式中的引用

#includeusing

namespace

std;

class

sample

sample(sample &a): x(a.x)

int getx()

};//

形參為引用

void disp(sample &s)

//void disp(sample s)

intmain()

/*output

call constructor sample(int a)

call constructor sample(sample &a)

22*/

函式形參不是引用程式輸出如注釋,結果顯示呼叫了兩次類sample的複製建構函式,第一次是建立s2物件時呼叫,第二次是傳遞引數時呼叫,即將s1物件拷貝給形參s時呼叫了複製建構函式。

#includeusing

namespace

std;

class

sample

sample(sample &a): x(a.x)

int getx()

};//

形參不是引用

//void disp(sample &s)

void disp(sample s)

intmain()

/*output

call constructor sample(int a)

call constructor sample(sample &a)

call constructor sample(sample &a)

22*/

返回值是非引用物件,返回棧中的物件,函式返回後棧中的物件消失。

#includeusing

namespace

std;

class

sample

sample(

inta): x(a)

sample(sample &a): x(a.x)

~sample()

int getx()

};//

形參是引用

void disp(sample &s)

//返回值不是引用

sample copy(sample &a)

intmain()

/*output

call constructor sample(int a)

call constructor sample(int a)

call copy function

call destructor

22call destructor

call destructor

*/

#includeusing

namespace

std;

class

sample

sample(

inta): x(a)

sample(sample &a): x(a.x)

~sample()

int getx()

};//

形參是引用

void disp(sample &s)

//返回值是引用

sample& copy(sample &a)

intmain()

/*output

call constructor sample(int a)

call constructor sample(int a)

call copy function

call destructor

call constructor sample(sample &a)

2686744

call destructor

call destructor

*/int

main()

/*output

call constructor sample(int a)

call constructor sample(int a)

call copy function

call destructor

22call destructor

call destructor

*/

引用引數與引用返回值

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

引用 引用型返回值

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

引用做引數與引用做返回值

一 引用做引數 引用做引數時,和c語言中的 傳址 是乙個道理,即通過函式來改變身處主函式中的變數。例 void fun int b int main 執行fun函式後,主函式中的整型變數a的值就變為了22,因為a和b實際上是同一處空間但是有了不同的名字。可以拓展到交換主函式中變數的值 void fu...