引用的用法

来源:互联网 发布:大数据就业培训 编辑:程序博客网 时间:2024/05/22 05:24

一.引用声明
我们知道C中的& 符号表示取地址,而在C++中&是表示引用。引用也就是为一个变量起别名,当我们对该别名操作,与直接对该变量进行操作,效果是一样的。
声明:类型标识符 &引用名 = 目标变量名
例如:int a = 3; int &ra = a;//定义引用ra,
ra = 4; //改变ra的值,此时a 也变成4
<说明>:
(1) &不是取地址符 而是起标识作用
(2)类型标识符是指目标变量的类型
(3)声明引用时候 必须同时进行初始化
(4)声明完毕后 相当于这个目标变量名有两个名字,且不能将这个引用名当做其他目标变量的别名
(5)引用,不是一种数据类型,不占存储空间。对其求地址就是对目标变量求地址。&ra = &a;
应用场景

  1. 作为参数传递
    值传递存在一定局限性(效率问题,需要将整个参数都压入栈),C语言中,采用指针传递,大大提高了效率,C++中采用引用同样可以达到该效果。一个比较常见的应用就是数值交换顺序。
    传地址:swap(int *a,int *b){int p;p=*a;*a=*b;*b=p;}
    传引用:
swap(int&a,int&b){int p;p=a;a=b;b=p;}main(){   //主调函数int a =1,b =2;swap(a,b);cout<<a<<'and'<<b;//输出 2 and 1}

由上面内容可知,
传引用时候,由于传入的是实参,被调函数中对引用的操作,其实是直接对实参的操作。形参不需要新开辟存储空间,形参是实参的引用。
值传递时候,当发生函数调用时,需要给形参分配存储空间,并将实参内容拷贝到形参内,被调函数对形参进行操作。
2. 常引用
声明:const 类型标识符 &引用名 = 目标变量名
这种方式的引用,不能通过引用来修改变量的值。从而提高代码健壮性等。
例如
3. 引用作为返回值
类型标识符 & 函数名(形参列表){函数体}
用引用返回一个函数值的最大好处是不产生被返回的副本。

float temp;//全局变量 temp;float func(float r);//声明函数funcfloat &func2(float r);//声明函数func2float func(float r){ //返回值方式temp = (float)r*r*3.14;return temp;}float &func2(float r){ //返回引用方式temp = (float)r*r*3.14;return temp;}void main(){float a = func(10.5);float &b = func(10.2);//error;float c = func2(19.2);float &d = func2(18.3);}

4 引用与多态
基类引用 可以指向派生类,且基类只能访问派生类从基类继承下来的成员。
若基类中含有虚函数,这样就可以通过基类引用实现多态。
参考:http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html

0 0