關於返回型別為引用

2021-09-27 18:31:59 字數 1098 閱讀 9347

在c++中,函式經常返回型別為引用。

這裡呢,我主要說的一點是,當返回型別為引用時,我們可以用引用來接受,也可以用普通變數來接受。

#include "pch.h"

#include using namespace std;

int a = 19;

int& lyy()

int main()

結果如下:

1919

f:\c++**\about yinyong try\debug\about yinyong try.exe (程序 1796)已退出,返回**為: 0。

若要在除錯停止時自動關閉控制台,請啟用「工具」->「選項」->「除錯 」->「除錯停止時自動關閉控制台」。

按任意鍵關閉此視窗...

但是如果我們用引用來接受返回型別為普通變數型別時,就會顯示錯誤。

#include "pch.h"

#include using namespace std;

int a = 19;

int lyy()

int main()

分析原因:

當我們返回型別為普通型別時,例如int,被調函式結束的時候,會生成乙個臨時物件,然後return的內容拷貝給這個臨時物件。這裡為什麼要生成臨時物件呢?當被調函式執行完後,相應棧空間就會被釋放,可能被重新分配,導致裡面的內容消失,所以才會另外產生乙個臨時物件,來儲存要返回的內容。當然不一定非要產生乙個臨時物件,也可以放到暫存器中短暫儲存。只要能保證這個內容不會消失即可。

然後將這個臨時物件返回給主調函式。

但返回型別為引用時,例如int*,不會生成臨時物件。會直接返回物件。所以呢,我們絕對不允許返回區域性物件的引用。因為等到被調函式執行完畢後,這個區域性變數都找不到了,還何談引不引用?

例子中,引用返回的全域性變數,所以我們通過引用來接受,也可以通過變數來接受。也就相當於

int b=a;

int& c=a;

但是,當返回普通變數時,返回的時臨時物件。對臨時物件的引用可是非常危險的,所以呢,編譯器不允許通過。

錯誤出的例子相當於:

int& c=臨時物件;

返回型別 》引用

1.何謂 引用 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用,不是新定義了乙個變數,它只表示該引用名...

C 函式返回非引用型別與返回引用型別

函式的返回過程和引數傳遞過程是相對稱的兩個的過程。引數傳遞從呼叫函式向被呼叫函式傳遞,返回值從被呼叫函式向呼叫函式返回。有與傳遞方式的區別 拷貝副本與傳遞本身 函式形參可以分為引用形參和非引用形參 類似的,函式返回值也可以分為非引用型別返回值和引用型別返回值,二者的差異和引用形參和非引用形參型別。當...

C 返回引用型別

c 返回引用型別 a a 就生成了乙個固定位址的指標,並把指標帶給你 但a a 會生成乙個臨時物件變數,並把這個臨時變數給你 這樣就多了一步操作 當返回乙個變數時,會產生拷貝。當返回乙個引用時,不會發生拷貝,你可以將引用看作是乙個變數的別名,就是其他的名字,引用和被引用的變數其實是乙個東西,只是有了...