在c++中有一种新的语法,叫做引用,引用我们也可以称为是给一个变量取一个别名

就像这里,b就是a空间的别名,也就是说a和b同时指向一块空间。 

c++中的引用_c++

 那么引用究竟有什么实际的好处呢???

记得我们之前写过交换变量数据的函数,这里我们使用引用就不需要返回值了

x1就是指向第一个传入的参数,x2指向第二个传入的参数 

c++中的引用_引用_02

 这里我们就是将引用用作传参,因此我们可以得知,当我们使用引用传参时,我们可以通过函数的内部修改函数外面的参数。

对于引用我们还有以下几点需要注意的:

1、我们在定义一个新的引用变量时我们要立刻将它初始化

2、我们对于一个变量可以有它的多个引用,但是我们一个变量不能引用多个变量

这样子b就指向了多个变量。 

c++中的引用_引用_03

那么我们使用引用到底有什么好处呢???

使用引用我们可以提高效率,因为我们不需要再创建一个新的变量,而是给这个变量取一个别名就可以,这个可以减少我们开辟空间的成本。

我们来看下面的这个函数它是将n作为返回值,但是要知道的是,这个n不是直接赋值返回给ret的而是先会创建一个临时变量之后再赋值给ret

c++中的引用_放大缩小_04

 那么这里有人会问我们能将引用作为返回值返回n的地址吗???

答案是不能的。

c++中的引用_放大缩小_05

 

c++中的引用_c++_06

 

c++中的引用_赋值_07

 

c++中的引用_引用_08

 对于引用我们还有最后一点,我们来了解以下权限的放大缩小和平移问题。

我们先来看权限的放大,a是const修饰的常变量,但是给a取别名为b,b是int类型的变量,所以这样是不可行的。 

c++中的引用_放大缩小_09

 权限的平移:同样的,给a取别名为c,c是常变量,所以可行 

c++中的引用_赋值_10

权限的缩小:x是int类型,y是x的别名,y是常变量类型,所以相当于把x的权限缩小了 

 

c++中的引用_引用_11

所以对于权限,我们采用以下准则:

c++中的引用_放大缩小_12

 

我们再来看以下的程序为什么会报错?

c++中的引用_引用_13

 

解释:因为不同类型拷贝会生成一个临时变量,而临时变量是具有常属性的,我们不能对常量取别名

下面的代码是可行的,因为它是赋值。

c++中的引用_赋值_14

 

那么要怎么解决这个问题呢??

我们只需要加上const就可以了,d就具有常属性了 

c++中的引用_引用_15

 同样的,下面的代码也会报错

c++中的引用_c++_16

原因也是func返回时也会创建一个临时变量,它具有常属性,这样子赋值,也就是说将权限放大了。