1. 作用: 给变量起别名
int a=10;
int &b=a;
2. 特点:
//引用必须初始化
int &b;//错误
//引用在初始化以后不能再改变
int &b=a;
b=c;//错误,这是赋值操作,并不是更改引用,a,b里面的值都会变成c
3. 引用做函数参数
//简化地址传递
void swap(int &a,int &b){//此处的a相当于是下面a的别名,指向同一个地址,修改形参就可以改变实参
int temp=a;
a=b;
b=temp;
}
int a=10,b=20;
swap(a,b);//a=20,b=10
4. 引用做函数返回值
int& test(){
static int a=10;
return a;
}
int &ref=test();
cout<<ref<<endl;//10
test()=1000;//相当于a=1000,ref为a的别名
cout<<ref<<endl;//1000
//如果函数的返回值为引用,这个函数调用可以作为左值
5. 引用的本质
//引用在C++中的实现本质为一个指针常量
int a=10;
int &ref=a;//自动转化为int * const ref=&a
ref=20;//内部发现ref是引用,自动转化为*ref=20
6. 常量引用
//作用:修饰形参,防止误操作
const int ref=10;//错误
const int& ref=10;
//正确,编译器生成:int temp=10; const int& ref=temp;
ref=20;//错误,加入const之后变为只读不可以修改
int fun(const int &a)
{
a=100;//错误,不能修改
cout<<a<<endl;
}