C++中如何使用引用避免內(nèi)存復(fù)制
引用讓您能夠訪問相應(yīng)變量所在的內(nèi)存單元,這使得編寫函數(shù)時引用很有用。典型的函數(shù)聲明類似于下面這樣:
ReturnType DoSomething(Type parameter);
調(diào)用函數(shù) DoSomething() 的代碼類似于下面這樣:
ReturnType Result = DoSomething(argument); // function call
上述代碼導(dǎo)致將 argument 的值復(fù)制給 Parameter,再被函數(shù) DoSomething() 使用。如果 argument 占用了大量內(nèi)存,這個復(fù)制步驟的開銷將很大。同樣,當(dāng) DoSomething() 返回值時,這個值被復(fù)制給 Result。如果能避免這些復(fù)制步驟,讓函數(shù)直接使用調(diào)用者棧中的數(shù)據(jù)就太好了。為此,可使用引用。
可避免復(fù)制步驟的函數(shù)版本類似于下面這樣:
ReturnType DoSomething(Type& parameter); // note the reference&
調(diào)用該函數(shù)的代碼類似于下面這樣:
ReturnType Result = DoSomething(argument);
由于 argument 是按引用傳遞的, Parameter 不再是 argument 的拷貝,而是它的別名。另外,接受引用參數(shù)的函數(shù)可使用這些參數(shù)返回值,如下面示例程序所示:
#include <iostream>
using namespace std;
void GetSquare(int& number)
{
number *= number;
}
int main()
{
cout << "Enter a number you wish to square: ";
int number = 0;
cin >> number;
GetSquare(number);
cout << "Square is: " << number << endl;
return 0;
}輸出:
Enter a number you wish to square: 5
Square is: 25
分析:
計算平方的函數(shù)位于第 3~6 行。它通過引用參數(shù)接受一個要計算其平方的數(shù)字,并通過該參數(shù)返回結(jié)果。如果忘記將參數(shù) number 聲明為引用( &), 結(jié)果將無法返回到調(diào)用函數(shù) main(), 因?yàn)?nbsp;GetSquare() 將使用 number 的本地拷貝執(zhí)行運(yùn)算, 而函數(shù)結(jié)束時該拷貝將被銷毀。通過使用引用, 可確保 GetSquare() 對 main() 中定義的 number 所在的內(nèi)存單元進(jìn)行操作。這樣,函數(shù) GetSquare() 執(zhí)行完畢后,也可以在 main() 中使用運(yùn)算結(jié)果。
在這個示例中,修改了輸入?yún)?shù)。如果要保留這兩個值—傳入的數(shù)字及其平方,可讓函數(shù)接受兩個參數(shù):一個包含輸入;另一個提供平方值。
到此這篇關(guān)于C++中如何使用引用避免內(nèi)存復(fù)制的文章就介紹到這了,更多相關(guān)C++ 引用避免內(nèi)存復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(53.最大子數(shù)組)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(53.最大子數(shù)組),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++實(shí)現(xiàn)教職工信息管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)教職工信息管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03

