引用相当于是一个变量的别名,必须指向变量,比如
int val=100;
int &refval=val;
int*p=&val;//指针与引用不同在于,指针指向的变量可以修改
声明引用变量时候必须初始化,一经申明不可变更
int rat;
int & rodent;
rodent=rat//错误,不能像指针那样先申明再赋值
int a,b;
int&r=a;
int&r=b;//错误,不能更改原有的引用关系
可以对引用再次引用,多次引用的结果是一变量具有多别名
int a;
int &r=a;
int &rr=r;//可以,表示a有两个别名,分别是r和rr
引用有点接近const,必须在创建时初始化,一旦产生关联将一直效忠下去
int &rodents=rats;
int *const ptr=&rats//rodents扮演的角色和表达式*ptr一样
常引用
const引用的目的是:禁止通过修改引用值来修改被引用的对象
普通引用绑定到const是不合法的,比如
const int a =1;int &b=a;//编译不通过,a为const表示不能被修改,必须使用const引用
double val=3.14;
const int &ref=val;
double &ref2=val;
cout<<ref<<" "<<ref2<<endl;
val=4.14;
cout<<ref<<" "<<ref2<<endl;
//结果是 3 3.14 3 4.14
由于ref为const,初始化给定的值无法被修改,而val是非const的,所以会改变ref2的值
按引用传递
在参数中放入引用类型,传递的是本身的(的地址),将参数作为变量使用,作用于外部
void swap(const int&rhs,const int&lhs)//可以规避改变外部值的危险