引用主要用于传递函数的参数,还可以用作函数的返回类型。
引用就是被引用对象的别名,两者本质上是同一个对象。在定义引用的同时必须初始化,被引用的对象不能是常量或右值表达式。
引用和指针都是通过地址间接访问数据,但不同的是:引用不能独立存在,引用不占内存空间。
由于引用和被引用的对象本质上为同一对象,故对引用重新赋值也即对被引用的对象重新赋值。所有对引用的操作实际上都是对被引用对象的操作。
引用自从初始化那刻起,就与被引用对象同生共死永不分离,山无棱天地合也不与君绝。
只要是变量就可以建立对它的引用,包括指针。其语法如下:
int m=3;
int* p=&m;
int*& r=p;
p是指向m的指针,r是p的引用,当然也是指向m的指针。
但是引用本身不是变量,故不能建立引用的引用,也不能定义指向引用的指针。另外,创建引用数组也是违法的,也不能定义void类型的引用。
引用作为函数参数,主要有三个用途:
1)作为输出参数,返回多个值。
2)作为输入参数,同时也作为输出参数,保留函数内部对参数的修改。
3)作为输入参数,传递大对象,提高参数传递的效率。(此时为防止对输入参数的修改经常把输入形参类型设置为常量引用)。
引用类型也可以作为函数的返回类型,此时不需要生成数据的副本,效率高。然而,不要返回局部变量或对象的引用,这和不要返回指向局部变量或对象的指针是一个道理。