c++新增了一个复合类型-引用变量。引用是已经定义的变量的别名(另一个名称)。引用的主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本。
1.创建引用变量
c和c++使用&符号来表示变量的地址,c++给&符号赋予了另一个含义,将其用来声明引用变量。例如,将rodents用作变量rats的别名,可以这样做:
int rats;
int & rodents=rats;
其中,int & 指的是指向int的引用,上述声明将rats和rodents互换,他们指向的是同一个地址处的同一个变量。
2.引用的初始化
必须在声明引用时将其初始化,而不能像指针一样,先声明,再赋值。例如,
int rats;
int & rodents;
rodents=rats; //invalid不合法
3.将引用用作函数参数
引用常被用作函数参数,使得函数中的参数成为调用程序中变量的别名,这种传递参数的方式叫做按引用传递。这是c++新增的特性,是对c语言的超越。下面是一个简单地交换两个变量值的程序:
#include <iostream>
using namespace std;
void swapr(double & x,double & y);
int main()
{
double a,b;
cout<<"输入两个数:\n";
cin>>a>>b;
cout<<"a= "<<a<<","<<"b= "<<b<<endl;
cout<<"交换两个数:\n";
swapr(a,b);
cout<<"Now,a= "<<a<<","<<"b= "<<b<<endl;
return 0;
}
void swapr(double & x,double & y)
{
double temp;
temp=x;
x=y;
y=temp;
}
结果
4.引用的属性和特别之处
1.例如以下函数:
double cube(double & a)
{
a*=a*a;
return a;
}
输入x=3;则程序运行的结果为27=cube(x);但是注意的是此时,x的值也是27,我们的本意是不修改x的值,如果是按值传递,那么x的值还是3,我们运用的是x的副本。
如果,程序员的意图是让函数使用传递给它的信息,而不对这些信息进行修改,同时又想使用引用,则应使用常量引用。即在此函数中,函数头和函数原型中使用const:double cube(const double & a)。这样做编译器一旦发现代码修改了a的值,将生成错误信息。
2.临时变量、引用参数和const
如果实参和引用参数不匹配,c++将生成临时变量,并让引用指向这个临时变量,当前仅当引用参数为const引用时,c++才会这样做。
- 什么时候生成临时变量?①实参的类型正确,但不是左值;②实参的类型不正确,但可以转换为正确的类型。
总之,应尽可能地使用const引用。