C++中如何使用引用避免內存復制
引用讓您能夠訪問相應變量所在的內存單元,這使得編寫函數時引用很有用。典型的函數聲明類似于下面這樣:
ReturnType DoSomething(Type parameter);
調用函數 DoSomething()
的代碼類似于下面這樣:
ReturnType Result = DoSomething(argument); // function call
上述代碼導致將 argument 的值復制給 Parameter,再被函數 DoSomething()
使用。如果 argument 占用了大量內存,這個復制步驟的開銷將很大。同樣,當 DoSomething()
返回值時,這個值被復制給 Result。如果能避免這些復制步驟,讓函數直接使用調用者棧中的數據就太好了。為此,可使用引用。
可避免復制步驟的函數版本類似于下面這樣:
ReturnType DoSomething(Type& parameter); // note the reference&
調用該函數的代碼類似于下面這樣:
ReturnType Result = DoSomething(argument);
由于 argument 是按引用傳遞的, Parameter 不再是 argument 的拷貝,而是它的別名。另外,接受引用參數的函數可使用這些參數返回值,如下面示例程序所示:
#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
分析:
計算平方的函數位于第 3~6 行。它通過引用參數接受一個要計算其平方的數字,并通過該參數返回結果。如果忘記將參數 number 聲明為引用( &), 結果將無法返回到調用函數 main()
, 因為 GetSquare()
將使用 number 的本地拷貝執(zhí)行運算, 而函數結束時該拷貝將被銷毀。通過使用引用, 可確保 GetSquare()
對 main()
中定義的 number 所在的內存單元進行操作。這樣,函數 GetSquare()
執(zhí)行完畢后,也可以在 main()
中使用運算結果。
在這個示例中,修改了輸入參數。如果要保留這兩個值—傳入的數字及其平方,可讓函數接受兩個參數:一個包含輸入;另一個提供平方值。
到此這篇關于C++中如何使用引用避免內存復制的文章就介紹到這了,更多相關C++ 引用避免內存復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)教職工信息管理系統(tǒng)課程設計
這篇文章主要為大家詳細介紹了C++實現(xiàn)教職工信息管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03