引用與區域性變數的返回問題

2022-05-13 22:39:14 字數 815 閱讀 8554

今天剛相對徹底的搞懂函式返回區域性普通變數(不包括指標和引用)與區域性指標、引用的返回區別,先看下面**

#include #include 

using

namespace

std;

string version1(const

string &s1,const

string &s2);

const

string & version2(string &s1,const

string &s2);

const

string &version3(string &s1,const

string &s2);

intmain()

string version1(const

string &s1,const

string &s2)

const

string & version2(string &s1,const

string &s2)

const

string &version3(string &s1,const

string &s2)

當函式執行version1時能夠很順利的通過,當執行version3時會導致程式崩潰。

當函式的返回型別是普通變數時,return時會把值cp乙個臨時變數,就像函式按值傳參,如果函式返回的是乙個引用或指標型別時,它不會發生按值傳遞那樣的cp,相反它會被函式釋放掉,(這個過程可以聯想到我們按位址傳值和引用傳參的過程,函式內部可以直接進行對原資料的更改)如果還使用它的返回值,會發生意想不到的結果。

引用與區域性變數的返回問題

今天剛相對徹底的搞懂函式返回區域性普通變數 不包括指標和引用 與區域性指標 引用的返回區別,先看下面 include include using namespace std string version1 const string s1,const string s2 const string ve...

不能返回區域性變數的引用

源之 int add1 int a,int b int add2 int a,int b 請問這兩個函式返回有什麼區別,是乙個返回副本,另乙個直接返回嗎?呼叫函式add2有什麼危險嗎?add1的確返回了乙個副本,如果sum是自定義的類型別,可以很明顯看出拷貝建構函式在返回時被呼叫,對於內建型別沒什麼...

返回區域性變數的問題

函式返回區域性變數,是返回區域性變數的值。但指標 或位址 是一種特殊的值,所以返回區域性指標變數需要特別注意。正確情況下,作為函式返回值的區域性指標,其所指向物件的作用域應該是呼叫者作用域 全域性或靜態常量區 指向棧空間物件的指標作為返回值,存在潛在的錯誤。1.返回區域性值變數 函式返回時,將返回a...