C++中的引用

C++中引用定义形式一般如下:

类型     &变量  =  目标变量

        引用相当于是目标变量的一个别名,对引用的操作与对目标变量的直接操作相同。

        引用只是相当于目标变量的一个别名,内存中不会给引用分配存储空间。

        引用在声明时进行初始化,引用一旦声明之后,就不可以再指向其它的目标对象。


例:

int   & a ;                               //错误,引用在声明时,必须进行初始化

                int    b  =  10;

int    c  =  30;

                int    & rb =  b                     //定义b的引用rb

rb   =   c;                             //错误,引用在声明之后,不能再指向其它的变量

                int   *pb   =  & b;                

                int    &*rpb  =  pb;            //声明指针pb的引用rpb

                cout << &b<<endl;            //输出变量b的地址,假定结果为0013FF80

cout << &rb<<endl;          //声明只是相当于变量的别名,因此输出的结果仍为0013FF80

                cout << rb  << endl;         //10

                cout << *pb <<endl;        //10


                 rb + = 10;

                 cout << rb <<endl;           //20

                 cout<< *rpb << endl;       //20


       注意:1、不能对void类型的进行引用。例:void &ra = 3 错误。

                   2、不能对数组建立引用。

                         例: int   a[10];

                                  int   &ra = a;    错误

                         因为数组名是数组空间的首地址,其本身并不是一个数据类型。

                   3、不能声明引用的引用

                         因为引用本身不是一个数据类型,因此没有引用的引用

                   4、没有空引用,例  int    &r  = NULL;   错误


关于常引用,从网络上搜了一些简单说明,目前还是没有理解。

       

这里再来专门总结一下c++中常引用的用法:

    const引用是指向const对象的引用。声明形式: const 类型标识符 &引用名 = 目标变量名;
    例如:
            const int val = 1000;
            const int &ref1 = val; //Correct
            int &ref2 = val;    //Error

    在上面的两个引用中,第一个是正确的,而第二个是错误的。因为val是const类型,一旦初始化不能再被赋值或修改,所以它的引用也必须是const类型来确保不会赋值。

    还有一个常见的例子如下:
    int a ;
    const int &ref=a;
    ref=1000;     //Error
    a=1000;      //Correct

    《C++ primer》第二章中对const引用的用法给出了很精辟的注释:

    非const引用只能绑定到与该引用同类型的对象。
    const引用则可以绑定到不同但相关的类型的对象或绑定到右值。

    下面的引用是合法的:
    int i = 1000;
    const int &r1 = 500;
    const int &r2 = r1 + i;


    将“引用”作为函数返回值的类型,例:

    int &max(int &a, int &b)

    {

renturn a>b ? a:b;

     }

      max()函数返回一个整型的引用,那么max()这个函数也是a和b中较大者所引用对象的引用。如果a = 3, b = 4,那么max()就是b所引用对象的引用。然后我们执行 max(a, b)++ ,效果就是b的值变为5 。

     使用该方法的好处是在内存中不用产生返回值的内存对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值