引用作為返回值
1.通過使用引用來替代指針,會使 C++ 程序更容易閱讀和維護。
2.C++ 函數可以返回一個引用,方式與返回一個指針類似。
3.當函數返回一個引用時,則返回一個指向返回值的隱式指針。這樣,函數就可以放在賦值語句的左邊。
注意:
(1)以引用返回函數值,定義函數時需要在函數名前加 &
(2)用引用返回一個函數值的最大好處是,在內存中不產生被返回值的副本。
引用作為返回值,必須遵守以下規則:
(1)不能返回局部變量的引用。主要原因是局部變量會在函數返回后被銷毀,因此被返回的引用就成為了"無所指"的引用,程序會進入未知狀態。
(2)不能返回函數內部new分配的內存的引用。雖然不存在局部變量的被動銷毀問題,可對於這種情況(返回函數內部new分配內存的引用),又面臨其它尷尬局面。例如,被函數返回的引用只是作為一 個臨時變量出現,而沒有被賦予一個實際的變量,那么這個引用所指向的空間(由new分配)就無法釋放,造成memory leak。
(3)可以返回類成員的引用,但最好是const。主要原因是當對象的屬性是與某種業務規則(business rule)相關聯的時候,其賦值常常與某些其它屬性或者對象的狀態有關,因此有必要將賦值操作封裝在一個業務規則當中。如果其它對象可以獲得該屬性的 非常量引用(或指針),那么對該屬性的單純賦值就會破壞業務規則的完整性。
實例代碼
#include <iostream>
using namespace std;
double vals[] = { 10.1, 12.6, 33.1, 24.1, 50.0 };
double& setValues(int i)
{
return vals[i]; // 返回第 i 個元素的引用
}
// 要調用上面定義函數的主函數
int main()
{
cout << "改變前的值" << endl;
for (int i = 0; i < 5; i++)
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
setValues(1) = 20.23; // 改變第 2 個元素
setValues(3) = 70.8; // 改變第 4 個元素
cout << "改變后的值" << endl;
for (int i = 0; i < 5; i++)
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
system("pause");
return 0;
}
運行結果:

轉自:https://www.runoob.com/cplusplus/returning-values-by-reference.html
