引用就是某一变量(目标)的一个别名,对引用的操做与对变量直接操做彻底同样。ios
引用的声明方法:类型标识符&引用名=目标变量名;数组
例如:函数
int q; int &ra=a;
说明:spa
声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它自己不是一种数据类型,所以引用自己不占存储单元,系统也不给引用分配存储单元。故:对指针
引用求地址,就是对目标变量求地址。&ra与&a相等。code
不能创建数组的引用。由于数组是一个由若干个元素所组成的集合,因此没法创建一个数组的别名。对象
引用应用blog
引用的一个重要做用就是做为函数的参数。之前的C语言中函数参数传递是值传递,若是有大块数据做为参数传递的时候,采用的方案每每是指针,由于这样能够避免将整块数据所有压栈,内存
能够提升程序的效率。可是如今(C++中)又增长了一种一样有效率的选择(在某些特殊状况下又是必须的选择),就是引用。ci
例
void swap(int &p1,int &p2) //此处函数的形参p1, p2都是引用 { int p; p=p1; p1=p2; p2=p; }
为在程序中调用该函数,则相应的主调函数的调用点处,直接以变量做为实参进行调用便可,而不须要实参变量有任何的特殊要求。
如:对应上面定义的swap函数,相应的主调函数可写为:
main() { int a,b; cin>>a>>b; swap(a,b); //直接以a,b做为实参调用swap函数 cout<<a<<' '<<b; }
使用引用传递函数的参数,在内存中并无产生实参的副本,它是直接对实参操做;而使用通常变量传递函数的参数,当发生函数调用时,须要给形参分配存储单元,形参变量是实参
变量的副本;若是传递的是对象,还将调用拷贝构造函数。所以,当参数传递的数据较大时,用引用比用通常变量传递参数的效率和所占空间都好。
使用指针做为函数的参数虽然也能达到与使用引用的效果,可是,在被调函数中一样要给形参分配存储单元,且须要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序
的阅读性较差;另外一方面,在主调函数的调用点处,必须用变量的地址做为实参。而引用更容易使用,更清晰。
二、引用做为返回值
要以引用返回函数值,则函数定义时要按如下格式:
类型标识符&函数名(形参列表及类型说明)
{函数体}
说明:
1以引用返回函数值,定义函数时须要在函数名前加&
2用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。
例
#include <iostream.h> float temp; float fn1(float r);//声明函数fn1 float &fn2(float r);声明函数fn2 float fn1(float r)//定义函数fn1,它以返回值的方式返回函数值 { temp=(float)(r*r*3.14); return temp; } float &fn2(float r)//定义函数fn2,它以引用方式返回函数值 { temp=(float)(r*r*3.14); return temp; } void main ()//主函数 { float a=fn1(10.0)//系统生成要返回值的副本(即临时变量) float &b=fn1(10.0)//可能会出错, //不能从被调函数中返回一个临时变量或局部变量的引用 float c=fn2(10.0); //第3种状况,系统不生成返回值的副本 //能够从被调函数中返回一个全局变量的引用 float &d=fn2(10.0); //第4种状况,系统不生成返回值的副本 //能够从被调函数中返回一个全局变量的引用 cout<<a<<c<<d; }