c++中的引用(&)到底都有什么用处?

来源:百度知道 编辑:UC知道 时间:2024/06/18 15:00:35
&据说有很多种用法,有传址传递,在面向对象中也能用作形参。貌似还有节约内存的用法,这个我学的不大好,请强人们给我讲一下,他的各种用法和原理,以及什么情况下用它,谢谢拉!

比如int f(int a){...}
当你如下调用时:
int b;
f(b);
编译器会把b的值赋给a,在函数体内操作a;
而如果函数定义为:int f(int& a){...}
当你调用时,没有这个赋值的过程,因为此时a是实参的别名,相当于直接操作了实参b;
从这个例子可以看到引用的两个特性:
1 节约空间,少了一个实参赋值给形参的过程
2 可以直接操作实参,而不是形参
你说的面向对象中的节约内存,就是第一个特性,因为类对象往往很大,如果赋值方法进行函数调用的话,会增加开销。

引用在一定程度上就是指针。在C中,用指针作为变量调用函数,往往需要先把变量的地址赋值给一个指针变量,然后用这个指针变量作为函数实参。
其实有很多情况下我们在写程序得时候可能没想到定义得这个变量被用到函数参数中,但是确实需要,而且要求其数值改变,那么引用就可以做到这一点,在传递参数的同时还可以使得实参数值发生改变,因而增加了灵活性。

主要是参数传递时起作用,普通的参数传递,其实是传递了一份拷贝,如果参数比较复杂,比如大对象,那么产生的开销会很大;而且普通的参数传递,不能把更改回写,而引用传递可以改变参数的值。

int num = 0;//给num 分配了一个int型的内存空间,初始化为 0;
int &n = num;//没有分配内存空间,引用了一个变量名;
相当于给num 又起了一个别名叫 n;使用 n 和 num 是一样的;

比如你要传递一个实参 如果实参过大 为了避免复制就可以用引用