符合类型——引用变量
引用是以定义变量的别名,常用在作为函数的形参。可直接作用于变量的原始数据,而不是其拷贝。
声明引用
c++使用&来声明引用。
int rats;
int & rodents=rats;
指针与引用的区别
int & rodents=rats;
int * prats=&rats;
rodents与* prats都与rats相同,看上去,像是引用(rodents)隐藏了*。
实际上还是有区别的:
必须在声明引用时对其初始化,一旦与某个变量关联起来就一直效忠于它,而指针可以后面赋值,一直改变它的值。
从某种层面来讲引用像const指针,const指针不初始化就不能再赋值了。
int & rodents = rats;实际是下面的伪装:
int * const pr =rats;
将引用作为函数参数
这种方法称为按引用传递。突破了c中的按值传递。例:交换两个数的值。
void swapr(int & a, int & b)
{
int temp;
temp=a;
a=b;
b=temp;
}
指针表示,例:
int swapp(int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
两者的区别:1.声明函数参数的方式不同
2.另一个区别,p和q需要全程需要加入*。
引号的属性和特别工具
在引用前加上const,保护原先的值
引用在某种程度上是受限制的,它没有按值传递随意。它只能用变量当成参数。如:表达式不是变量就不能给 以引用为参数的函数赋值。
临时变量
只有在引用参数是const,编译器则在下列两种情况下生成临时变量。
1.实参类型正确,但不是左值。(可被引用的数据对象都是左值,如变量,数组元素,结构成员,指针等)
2.类型不正确,但可以转化为正确类型。
这些临时变量只在函数调用期间存在。
由于只有使用const才能生成临时变量,而临时变量也不会改变原先的数,在某些必要的时候需要使用这个特性。
使用const的三个理由:
使用const可以避免修改数据产生的错误
使用const可以处理const数据或非const数据实参,否则将只能接受非const数据
使用const引用使函数能够正确生成并使用临时变量。
因此尽可能将引用形参设为const。
尝试一下const不产生临时变量。
将引用用于结构
引用非常适用于结构和类。