還記得引用傳遞嗎?當時我們為了與按值傳參區分,我們把它叫做按址傳參。而今天我們將與引用返回區分。
按值傳參和按址傳參可以參考部落格c++函式(二)的最後一部分。
引用返回其實和引用傳遞一樣。引用傳遞使得傳入的變數和所對應引數的位址相同,而引用返回使得返回值的位址與傳給的變數的位址相同。
我們先來看下面的**
#include using執行結果:namespace
std;
//加法,按值傳參
int add(int a, int
b)//
減法,按址傳參,即引用傳遞
int sub(int& a, int&b)
//除法,引用返回(與引用傳遞相對)
int& division(int a, int
b)int
main()
我們可以看到,add函式和sub函式都可以最終都可以有返回值,但是到division這個函式的時候,程式執行了一段時間(從執行時間可以看出來較久),沒有執行最後一句話,並且以乙個負數返回,說明程式發生了錯誤。
這是因為變數c接受了division的返回值時,其位址與division函式中的區域性變數c的位址是一樣的,而division函式中的區域性變數c的生命週期與division函式的生命週期相同,故在函式執行完之後就會銷毀。
因為這個值已經被銷毀了,所以下一句自然訪問不到,也就沒有辦法執行了。
C 返回引用
關於c 中函式返回引用的討論 從函式返回引用 確保其引用的物件在函式執行完後仍然存在。引用型別返回值的主要特徵是可以作為左值,這意味著我們可以在賦值語句的左邊使用返回引用的函式的結果。永遠不要從函式中返回區域性變數的引用 c 中,返回引用是乙個比較晦澀的概念。在書中,對此僅僅做了乙個一般的介紹,並沒...
C 返回物件和返回引用
最大的區別在於,返回物件的話會在記憶體中根據返回的型別開闢一塊區域,用返回的值對該記憶體進行初始化,如果是返回的物件,利用拷貝構造來初始化這個區域,但是這塊區域並沒有名字,就是說之後使用者沒辦法訪問到這個區域,也成為無名變數,它只能在接下來的 中進行一次性的用途,要不作為引數傳遞,或者將值列印,再之...
C 返回物件和返回引用
我們發現,在c 中,有些成員函式返回的是物件,而有些函式返回的又是引用。返回物件和返回引用的最主要的區別就是函式原型和函式頭。car run const car 返回物件 car run const car 返回引用 返回物件會涉及到生成返回物件的副本。因此,返回物件的時間成本包括了呼叫複製建構函式...