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;
    }