C++引用变量

引用变量

C++新增了一种数据类型,即引用变量

引用是已定义的变量的别名(另外的一个名称),例如

将变量b作为变量a的引用,那么就可以交替使用a和b来使用该变量

引用变量的主要用途是用作函数的形参,通过将引用变量作为参数,函数将会使用原始的数据,而不是使用其副本,这样除了指针之外,引用也为函数处理大型的结构提供了一种非常方便的途径

引用变量的创建

在C和C++中使用&符号来指示变量的地址,C++给&符号赋予了另外的含义,即用来声明引用

int a;

int & b =  a;

此时&不代表取地址符,而是代表着b是a的引用变量,int & 指的是指向int的引用

以上的声明允许a和b进行互换,因为它们指向了相同的内存空间,并且存储了相同的值

运行结果:

通过这个例子,我们可以看出a与b的存储地址是一样的,因此a和b代表的都是同一个值     

引用与指针的区别

必须在声明引用时就将其进行初始化,而不是像指针那样,先声明再赋值

引用更接近与const指针,必须在创建时就进行初始化,一但与某个变量关联起来,就不会改变,例如

int a = 10;

int & b = a;

int *const p = &a;

此时b与p都不可以修改它们的指向,即可以使用b来修改a的值,但不能将b与其他的变量关联起来,p也是一样,可以使用p来修改a的值,但不能修改p的指向,p只能指向a

例如:

运行结果:

此时我们可以看出,b = c 这条语句仅仅是将c的值赋值给b,而b还是只与a相互关联,并没有改变这个关联的关系,b与c所在的内存空间也不一样

引用的用途

引用通常作为函数的参数,使得函数中的变量名作为调用程序中变量的别名,这种方式称为按引用传递,按引用传递允许被调用的函数能够访问调用函数中的变量

C语言只能够进行按值传递,按值传递导致被调用函数使用调用程序的值的拷贝,C语言也提供了按指针传递的方法,可以避免这种限制

例子:使用引用作为实参

运行结果:

此时使用引用的方式不使用指针也可以在函数内部改变实参的值

注意:如果不想修改实参的值,那么就使用按值传递的方式

引用的特性

如果使用按引用进行传递时,引用的限制会非常严格

如果使用了引用传递,那么传递的就应该是一个变量的别名,实参就应该是一个变量,不能是一个表达式,也不能是常量,但是如果使用const关键字,就可以传递常量

如果实参与引用的参数不匹配,C++将会产生临时变量,当前,仅当参数为const引用时,C++才允许这样做,那么什么时候会创建临时变量呢?编译器会在下面两种情况下产生临时变量:

实参的类型正确,但不是左值(左值)

实参的类型不正确,但可以转化为正确的值

如果发生实参与函数参数里的引用变量不匹配时,并且函数形参的引用是const类型的,那么编译器会将实参传递给一个临时的变量,此时这个临时变量再与函数形参里的引用变量再进行关联,即形参的引用实际上是一个临时变量的引用

此时5被传递给一个临时变量,该临时变量与a进行了关联,此时才能通过编译,并且,临时变量不会造成任何不利的影响,反而会使函数在处理的参数种类方面更加通用

因此,如果在声明时将引用指定为const,C++将在必要时产生临时变量,实际上,对于形参为const引用的C++函数,如果实参不匹配,则其行为更像是按值传递,为确保原始的数据不被修改,会使用临时变量进行存储值

注意:如果函数调用的参数不是左值或者相对应的const引用参数的类型不匹配,则c++将创建类型正确的匿名变量,将函数调用的参数的值传递给该匿名变量,并让参数引用匿名变量

形参引用使用const好处

可以避免无意中修改数据的编程错误

使函数能够出来const和非const实参,否则只能接收非const数据

能够使函数正确生成并使用临时变量

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值