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 的本地拷贝执行运算, 而函数结束时该拷贝将被销毁。通过使用引用, 可确保 GetSquare()
对 main()
中定义的 number 所在的内存单元进行操作。这样,函数 GetSquare()
执行完毕后,也可以在 main()
中使用运算结果。
在这个示例中,修改了输入参数。如果要保留这两个值—传入的数字及其平方,可让函数接受两个参数:一个包含输入;另一个提供平方值。
到此这篇关于C++中如何使用引用避免内存复制的文章就介绍到这了,更多相关C++ 引用避免内存复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!