例1:
int f()
int main
在例1的程式中,由於f()函式返回的是int型別,在函式結束時,要返回的值已經用於初始化函式的呼叫點的臨時量了(假設為temp,在main(呼叫者)中),函式執行完後,i確實是被銷毀了,但是temp還沒有被銷毀。int r= f()語句相當於執行:int r = temp;
例2:int& f()
int main
如果返回引用型別,就沒有拷貝到乙個臨時變數的過程,i被銷毀之後,引用也就不存在了,所以r得不到f()函式的返回值。
例3:int* f()
int main
在例3中,i是乙個int* 的區域性變數,是乙個位址變數,i指向的是區域性變數a的記憶體空間,當函式結束時位址傳入到了temp中,i被銷毀,同時位址中指向的記憶體空間也被銷毀,所以當r = temp時,實際上指向的是一塊被銷毀的區域,所以不能這麼呼叫。
c 中臨時變數不能作為非const的引用引數
引自 試看下面的 include using namespace std void f int a void g const int a int main 上面的兩個呼叫之前,a b的值會存在乙個臨時變數中,當把這個臨時變數傳給f時,由於f的宣告中,引數是int 不是常量引用,所以產生以下編譯錯誤 ...
不能返回區域性變數的引用
源之 int add1 int a,int b int add2 int a,int b 請問這兩個函式返回有什麼區別,是乙個返回副本,另乙個直接返回嗎?呼叫函式add2有什麼危險嗎?add1的確返回了乙個副本,如果sum是自定義的類型別,可以很明顯看出拷貝建構函式在返回時被呼叫,對於內建型別沒什麼...
C 引用與臨時變數
引用是c 的一種復合型別,是已定義的變數的別名,與原變數在同乙個記憶體位址。引用常常作為函式的形參,此時函式將使用原始資料 而不是原始資料的副本 使用引用時需要注意以下兩點 必須在宣告引用的時候就進行初始化,否則編譯會報錯。一旦成為某個變數的引用,則將一直效忠於它。下面通過乙個例子,來看看引用在函式...