1.引用的概念及用法
引用是C++中相比C语言的一个新的玩法,那C++中为什么要出现这个引用的功能昵?我们知道在C语言中经常涉及到传参的操作,而传参就是赋值的过程,赋值需要内存拷贝,对于,int ,float, doube这些类型的变量来说,拷贝内存没有任何压力,但对于数组,结构体,对象,这些大小不可估计的类型来说,这样的拷贝会消耗很大的时间,无疑降低程序的效率,通常这样的情况C语言会传指针解决,但C++中有了一个更加便捷的方式来解决,就是传引用,在C语言中返回函数值时,会生成一个临时变量来存储返回值,若是返回值很大时这个开销就很大,以引用返回返回的就是这个返回数据的指针,这样大大节约了开销,提高了效率,引用可以看作是一个数据的别名,通过这个别名就可以找到这个数据,
引用的使用方法:
type& name=data;
例如:int& b=a;
使用引用的规则:
1. 一个变量可取多个别名
2. 引用必须初始化
3. 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
2.引用做参数
当引用做参数时,这个形参就是实参的别名,他和实参占用同一块地址,因此使用引用代替指针将更加方便。如:
void Swap (int& left, int& right)
{
int temp = left;
right = left ;
left = temp ;
}
3.引用做返回值
当函数要返回一个数值时,通常就是直接返回,但是用传引用返回效率会更高,这是因为在C++中返回函数值时,会生成一个临时变量来存储返回值,若是返回值很大时这个开销就很大,以引用返回返回的就是这个返回数据的指针,这样大大节约了开销,提高了效率。
汇编层:
传值生成临时变量
这里mov是传值
传引用生成临时变量
这里lea是传地址
4.引用和指针的区别
引用虽然和指针很相似,但他们不是一个东西
例如:int& b=a; 这里b的地址就是a的地址,所以说b不占内存,但其实b还是占内存的,b在底层还是指针,只是在内部进行了封装,使使我们看起来是a的地址罢了。
1. 引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。
2. 引用必须指向有效的变量,指针可以为空。
3. sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
4. 指针和引用自增(++)自减(--)意义不一样。
5. 相对而言,引用比指针更安全。