类型名 & 引用名 =某变量名
int n=4;
int &r=n; //r引用了n,r 的类型是 int&
某个变量的引用 ,等价于这个变量,相当于该变量的一个别名
int n=7;
int &r=n;
r=4
cout<<r; //输出4
cout<<n; //输出4
n=5;
cout<<r; //输出5
引用的概念
- 定义引用时一定要将其初始化成引用某个变量
- 初始化后,他就一直引用该变量,不会再引用别的变量了
- 引用只能引用变量,不能引用常量和表达式
double a=4,b=5;
double &r1=a;
double &r2=r1; //r2也引用a
r2=10;
cout<<a<<endl; //输出10
r1=b; //r1并没有引用b
cout<<a<<endl; //输出5
引用应用简单实例
void( int a, int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int n1,n2;
swap(n1 ,n2); //n1 n2的值并不会被交换
void swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
b=tmp;
}
int n1 ,n2;
swap(n1,n2); //n1 n2值被交换
而用引用之后
void swap(int &a,int &b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int n1 ,n2;
swap(n1,n2); //n1 n2值被交换
一个比较酷炫的引用
int n=4;
int &SetValue(){return n;}
int main()
{
SetValue()=40;
cout<<n;
return 0;
}
//输出:40
常引用
定义引用时,前面加const关键字,即为“常引用”
int n;
const int &r=n;
r的类型是 const int &
不能通过常引用去修改其引用的内容:
int n=100;
const int &r=n;
r=200; //编译错误
n=300; //没问题
常引用 和 非常引用 的转换
const T& 和 T& 是不同的类型
T& 类型的引用或T类型的变量可以用来初始化 const T&类型的引用
const T类型的长变量和 const T&类型的引用不能用来初始化T&类型的引用,除非进行强制类型转换