引用
引用小结:
1、 引用在声明的时候必须同时要初始化,否则会出现错误。
int intone;int& rint=intone;
2、 引用是从一而终的,在初始化后不会在指向其他的变量。任何对该引用的付值都是对引用所维系的目标付值,而不是将引用维系到另一个目标上。
3、 由于引用本身不是类型,所以没有引用的指针和引用的引用。可以有指针的引用
4、 用引用传递函数参数与指针的效果一样,传递的是原来的变量或对象,而不是在函数作用域内建立变量或对象的副本
5、 可以利用引用返回多个值
6、 用引用返回值:函数返回值时,要生成一个值的副本。而用引用返回值时,不生成值的副本。
注意下面的例子:
float temp;
float fn1(float r)
{
temp=r*r*3.14;
return temp;
}
float& fn2(float r)
{
temp=r*r*3.14;
return temp;
}
void main()
{
float a=fn1(5);
float &b=fn1(5);//warning 因为值传递返回的是值得副本,是一个临时变量,而后再把值赋给该引用b,由于临时变量作用域短暂,所以b面临无效的危险,这样的情况下需要把他付给一个变量后再初始化引用。
float c=fn2(5);
float& d=fn2(5);
另外,不能返回一个局部作用域的变量的引用,这与返回一个局部作用域的指针性质一样严重
7、 函数调用作为左值
8、 用const 限定引用
传递指针和引用更大的目的是效率。当一个数据类型很大时,因为传值要复制副本,所以不可取。但是实参可能会被修改的可能,用const来限定实参不被修改。
9 、返回堆中变量的引用
int * pint=new int;
if(pint!=null)
{ int & rint=*pint; delete &rint;//当释放内存的时候注意应用的写法}