說明:
(1)以引用返回函式值,定義函式時需要在函式名前加&
(2)用引用返回乙個函式值的最大好處是,在記憶體中不產生被返回值的副本。
例如:#include
float temp; //定義全域性變數temp
float fn1(float r); //宣告函式fn1
float &fn2(float r); //宣告函式fn2
float fn1(float r) //定義函式fn1,它以返回值的方法返回函式值
float &fn2(float r) //定義函式fn2,它以引用方式返回函式值
void main() //主函式
{float a=fn1(10.0); //第1種情況,系統生成要返回值的副本(即臨時變數)
float &b=fn1(10.0); //第2種情況,可能會出錯(不同 c++系統有不同規定)
//不能從被調函式中返回乙個臨時變數或區域性變數的引用
float c=fn2(10.0); //第3種情況,系統不生成返回值的副本
//可以從被調函式中返回乙個全域性變數的引用
float &d=fn2(10.0); //第4種情況,系統不生成返回值的副本
//可以從被調函式中返回乙個全域性變數的引用
cout<
引用作為返回值,必須遵守以下規則:
(1)不能返回區域性變數的引用。主要原因是區域性變數會在函式返回後被銷毀,因此被返回的引用就成為了"無所指"的引用,程式會進入未知狀態。
(2)不能返回函式內部new分配的記憶體的引用。雖然不存在區域性變數的被動銷毀問題,可對於這種情況(返回函式內部new分配記憶體的引用),又面臨其它尷尬局面。例如,被函式返回的引用只是作為一 個臨時變數出現,而沒有被賦予乙個實際的變數,那麼這個引用所指向的空間(由new分配)就無法釋放,造成memory leak。
(3)可以返回類成員的引用,但最好是const。主要原因是當物件的屬性是與某種業務規則(business rule)相關聯的時候,其賦值常常與某些其它屬性或者物件的狀態有關,因此有必要將賦值操作封裝在乙個業務規則當中。如果其它物件可以獲得該屬性的非常 量引用(或指標),那麼對該屬性的單純賦值就會破壞業務規則的完整性。
「引用作為函式引數」與 「引用作為函式返回值」
一 引用作為函式引數 作為函式引數時引用有兩種原因 1 在函式內部會對此引數進行修改 2 提高函式呼叫和執行效率。關於第一點,都知道 c 裡提到函式就會提到形參和實參。如果函式的引數實質就是形參,不過這個形參的作用域只是在函式體內部,也就是說實參和形參是兩個不同的東西,要想形參代替實參,肯定有乙個值...
將引用作為函式返回值
要以引用返回函式值,則函式定義時必須遵循以下格式 型別識別符號 函式名 形參列表及型別說明 可見,以引用返回函式值,定義函式時需要在函式名前加 引用作為函式的返回值時,函式的返回值可以理解為函式返回了乙個變數 事實上,函式返回引用時,它返回的是乙個指向返回值的隱式指標 因此,值為引用的函式可以用作賦...
引用作為返回值 多型
1 引用作為返回值,必須遵守以下規則 1 不能返回區域性變數的引用。這條可以參照effective c 1 的item 31。主要原因是區域性變數會在函式返回後被銷毀,因此被返回的引用就成為了 無所指 的引用,程式會進入未知狀態。2 不能返回函式內部new分配的記憶體的引用。這條可以參照effect...