许多编程语言中的调用函数的两种方法是按值调用(call-by-value)和按引用调用(call-by-reference)。
参数按值调用传递时,生成参数值副本并且传给被调用函数,副本的改变并不影响调用者的原始变量值,这样就可以防止意外的副作用影响开发正确,可靠的系统。按值调用的一个缺点是,如果传递较大的数据项,则复制这个数据可能要占用相当长的执行时间。
而引用调用,调用者让被调用者函数能够直接访问调用者的数据,并且允许被调用函数能够修改其中的数据。
引用调用对性能有利,消除了赋值大量数据的开销。
下面为<<C++大学教程>>中介绍的例子:
#include<cstdlib>
#include<iostream>
using namespace std;
int squareByValue(int);
void squareByReference(int &);
int main(){
int x = 2,z = 4;
cout << "x = " << x << " before squareByValue/n"
<< "Value returned by squareByValue:"
<< squareByValue(x) << endl
<< "x= " << x << " after squareByValue/n" << endl;
cout << "z= " << z << " before squareByReference" << endl;
squareByReference(z);
cout << "z= " << z << " after squareByReference" << endl;
return 0;
}
int squareByValue(int a){
return a *= a;
}
void squareByReference(int &cRef){
cRef *= cRef;
}