C++ 把引用作為返回值


引用作為返回值

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM