引用
引用是充当另一个变量的别名的变量。引用类型最常用于函数的参数。在函数参数中使用引用变量可以使得函数对传递给他的变量作出永久性改变。同样也可以使用在其它地方,但是实用性不强。
在声明 中使用 "&" 来表示一个引用。
引用参数
一般情况下,参数按值传递到函数中进行使用。这时,函数获得的是参数的副本,所以对形参的修改不会影响到传入的实参的值。
如果参数通过引用传递,函数获得的是对实参本身的访问(不是像值传递一样创建一个副本,然后对副本进行访问或修改)。
声明方式: 类型& 变量名 类型 &变量名
这两种声明方法的效果是一样的,不同之处只是代码的风格差异。
例如:void MyFunction(int& num, int &test){ // program here}
一个完整的代码实例:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
void Test(int &n){
n = 666;
}
int main() {
int num = 0;
cout << "The original num: " << num << endl;
Test(num);
cout << "The present num: " << num << endl;
return 0;
}
输出结果:
用 “const” 修饰的引用
这样的声明看起来有点儿矛盾,采用引用参数的目的是使函数能更改参数的值,但 const 关键字阻止了这种更改。这是因为,更改参数的值不是使用引用参数的唯一目的,同样重要的是,在使用一个引用的情况下,不执行复制。在传递一个大的数据结构时,为了提高程序运行效率,不执行复制,最好使用引用参数。声明语法如下:
const 类型 &参数
因此,尽量把引用参数声明为 const 类型,除非你需要让函数来更改这个数据。
使用引用参数的优点:
1、在返回值不够用的情况下,可以避免全局变量泛滥,影响开发效率。
2、可以不使用指针,但完成一样的效果。
3、引用参数不会导致复制,如果参数是一个很大的数组或者对象,可以提高程序运行效率,节省资源。
注意事项:
1、只用左值可以被传递给引用参数(左值是能有效地放在赋值运算符左边的表达式:包括变量、数组元素、类成员、指针。不能讲一个常量如“Chamico” 传递给引用参数)。
2、如果引用参数绑定到某个变量后就不能再指代别的对象,但每个函数单独调用可以使参数引用的是一个不同的变量。
3、一元 “&” 运算符,只有当应用于正被声明的项目时才声明一个引用。当 “&” 作为一元运算符出现在可执行语句中时表示的是 “取地址符” ,作为二元运算符出现时表示 “按位与”。