C++引用
define:引用就是变量的一个别名。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量,标识符为 & .
引用的优点:
引用传递相比较于值传递没有进行值拷贝操作,因此提高了程序的运行效率;同时引用传递相比较于指针传递要简单,易于理解,而且可以提高程序的执行效率,在许多情况下能代替指针的操作。
引用的声明方法
[类型标识符] &[引用名]=[目标变量名]
eg:int x;int &rx=x; //声明变量x的引用rx
注意
1.&在此不是求地址运算,而是起标识作用。
2.引用在声明时就必须对它进行初始化
引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。ra=1;等价于 a=1;
3.引用本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
4.不能为数组建立引用,因为数组是由若干个元素组成,所以不能建立数组的别名。
5.不能建立void类型的引用(任何实际存在的变量都是属于非void类型的,void的含义是无类型或空类型,void只是在语法上相当于一个类型而已。
6.可以建立指针变量的引用,但是不能建立指向引用的指针(引用不是一种独立的数据类型)
int a=2;
int *p=&a;
int *rp=p; //rp是一个指向整型变量的指针变量的引用,初始化为p
7.常引用
可以用const对引用加以限制,常引用声明方式:
const 类型标识符 & 引用名=目标变量名;
用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。
int a=3;
cosnt int &ra=a;
ra=1; //错误,不能通过对const引用的目标变量进行值修改
a=1; //正确,a是普通变量,通过变量名修改是合法的
8.可以用常量或表达式对引用进行初始化,但此时必须用const作声明
int a=3;
const int &b=a+3;
编译器将此代码块理解为:
int temp=a+3;
const int &b = temp;
9.引用作为函数返回值
#include<iostream>
using namespace std;
int &Max(int &x,int &y)
{
return(x>y)?x:y;
}
int main()
{
int a = 2,b=3;
cout<<"a="<<a<<" b="<<b<<endl;
Max(a,b)=4; //函数返回两个参数中的大数本身,故此处为b赋值
cout<<"a="<<a<<" b="<<b<<endl;
return 0;
}
程序运行结果如下:
a=2 b=3
a=2 b=4
定义返回引用的函数时,注意不要返回对该函数内的自动变量的引用。否则,因为自动变量的生存期仅局限于函数内部,当函数返回时,自动变量就消失了,函数就会返回一个无效的引用。
函数返回的引用是对某一个函数参数的引用,而且这个参数本身也是引用类型,这样才能保证函数返回的引用由意义。
你可以期待太阳从东方升起,而风却随心所欲地从四面八方吹来。 ----萨特