C++引用

 

1. 引用基本概念及说明

引用就是为已有的对象a所起的另外一个名字b,可以通过引用去修改b以实现对象a的修改。

引用格式:类型说明符 &引用名=变量名

例程:

int i;
int &ri=i;
i=5;
cout<<i<<endl;
ri=10;
cout<<ri<<endl;

 

&不是C语言中的取地址运算,而是标识符

 

类型说明符必须和目标变量类型一致

说明

引用在声明时必须初始化

 

一个实体可以有多个引用,但是一个引用只能引用一个实体

引用即别名,相当于目标对象有一个原名和别名,引用不是对象,所以也无法作为另外一个引用的原名。

 

不能建立数组的引用

2. 引用的实际应用

2.1 引用作为参数

        还记得在C语言中,如果要对函数传入可以在函数内部修改,且修改有效的变量时,我们需要使用传入指针。而C++中,引用提供了传入可修改变量的一种方法,见例子

//p1,p2均为引用
void swap(int& p1, int& p2)
{
    int p;
    p = p1;
    p1 = p2;
    p2 = p;
}

int main()
{
    int a = 1, b = 2;
    cout << "交换前,a和b" << " " << a << " and " << b << endl;
    swap(a, b);
    cout << "交换后,a和b" << " " << a << " and " << b << endl;
}

输出:

 

从上述例子我们可以看出:

1

传递引用给函数和传递指针的效果是一样的

2

参数传递较大时,用引用比一般变量传递参数更好。原因是因为引用传递,内存中不产生实参的副本,其直接对实参操作;

使用一般变量传递时,需要复制实参产生副本,有空间消耗

3

引用相比于指针更容易使用,更清楚。指针效果与引用一样,甚至引用底层就是用指针实现,但是指针对象传入时,同样要分配空间;函数中需要使用解引用符(*)来运算,容易错误且代码阅读性较大;此外,调用函数时要使用变量地址来作为实参。 

           基于以上原因,在很多C++工程的源代码中,我们可以看到引用使用得远比指针传参频繁。 

 

      2.2 常引用:不能通过引用对目标进行修改,使得引用的目标成为常量,实现引用的安全性

          常引用声明方式:const 类型标识符 &引用名=目标变量名。

    例子:

     int i;
     const int &ri=i;
     ri=1;   //错误,无法通过常量引用修改目标实体i
     i=1;   //正确

      常引用更多使用在引用作为函数参数中,使得在函数内部无法修改传入参数,以实现代码的安全性。

 

     2.3 引用作为返回值,好处:内存中不产生返回值的副本

声明方式:类型标识符 &函数名(形参列表)

                {函数体}

这部分在此不做解释,可进一步查看参考2。

 

3. 引用总结

引用解决的问题:

过大数据或对象的传递,以减少空间消耗(不产生copy,提高效率);通过const使用,提高引用传递安全性;

引用与指针的

主要区别:

指针通过指针变量指向一个对象,通过地址对对象进行操作,会产生空间消耗。引用是对象的别名,对引用操作就是对对象操作,不产生空间消耗。同时,引用的代码可读性比指针更好.

什么时候

使用引用?

流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。      

 

参考:

  1. 《C++ Primer》2.3节 复合类型, 2.4节 const 限定符
  2. 引用介绍及用法:https://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html
  3. 指针详解:https://blog.csdn.net/weixin_39640298/article/details/84900326
  4. 指针与引用的区别:https://blog.csdn.net/smartgps2008/article/details/90648015                                                                                           https://blog.csdn.net/Sun_Life_/article/details/89304963
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值