在c++中有一种新的语法,叫做引用,引用我们也可以称为是给一个变量取一个别名
就像这里,b就是a空间的别名,也就是说a和b同时指向一块空间。
那么引用究竟有什么实际的好处呢???
记得我们之前写过交换变量数据的函数,这里我们使用引用就不需要返回值了
x1就是指向第一个传入的参数,x2指向第二个传入的参数
这里我们就是将引用用作传参,因此我们可以得知,当我们使用引用传参时,我们可以通过函数的内部修改函数外面的参数。
对于引用我们还有以下几点需要注意的:
1、我们在定义一个新的引用变量时我们要立刻将它初始化
2、我们对于一个变量可以有它的多个引用,但是我们一个变量不能引用多个变量
这样子b就指向了多个变量。
那么我们使用引用到底有什么好处呢???
使用引用我们可以提高效率,因为我们不需要再创建一个新的变量,而是给这个变量取一个别名就可以,这个可以减少我们开辟空间的成本。
我们来看下面的这个函数它是将n作为返回值,但是要知道的是,这个n不是直接赋值返回给ret的而是先会创建一个临时变量之后再赋值给ret
那么这里有人会问我们能将引用作为返回值返回n的地址吗???
答案是不能的。
对于引用我们还有最后一点,我们来了解以下权限的放大缩小和平移问题。
我们先来看权限的放大,a是const修饰的常变量,但是给a取别名为b,b是int类型的变量,所以这样是不可行的。
权限的平移:同样的,给a取别名为c,c是常变量,所以可行
权限的缩小:x是int类型,y是x的别名,y是常变量类型,所以相当于把x的权限缩小了
所以对于权限,我们采用以下准则:
我们再来看以下的程序为什么会报错?
解释:因为不同类型拷贝会生成一个临时变量,而临时变量是具有常属性的,我们不能对常量取别名
下面的代码是可行的,因为它是赋值。
那么要怎么解决这个问题呢??
我们只需要加上const就可以了,d就具有常属性了
同样的,下面的代码也会报错
原因也是func返回时也会创建一个临时变量,它具有常属性,这样子赋值,也就是说将权限放大了。