1.首先先前言一下,C++的的符号不是只用一个用法。就不如最常见的<< ,在C语言只有向左偏移。但是C++又加了一个,就是向左载流,即cout << 。所以接下的讲的引用符号也是的,所以不要搞混掉。
1.引用变量
(1).其实就像给一个人起别名一样。和C语言取地址是一样的,但是他省略了解引用。
那一个人只能有一个别名吗?显然不是,
其实都可以的,他相当于就是 下图所示的关系,一个空间被多个变量所指向。
2.引用作参数
这是C语言的代码:
这是C++的代码:
这个不仅省略掉了解引用 *, 而且调用函数的时候也不需要取地址了。在大量调用这个变量,而且都要在前面加 * ,其实是比较烦的一件事。
3.引用作返回值(提高拷贝效率)
1.先说好处,节省了空间和时间。
2.这是没有引用做返回值的,他会开辟一个静态空间,然后再传给ret。说个题外话,在C语言中,即使是右边不加static的局部变量,传给ret的时候,C语言做了个傻瓜式的处理,就是仍然是开辟的一个新的静态空间,这样应该是为了方便才这样处理的吧。因为函数调用结束后,局部的变量会被销毁掉,如果不存储,就不能传给ret了。
但是,作引用返回,就不会这样,会直接传给变量ret,因为他传的就是一个别名了。
为什么会节省空间呢,你就想成他传的是地址,(确实这里C语言中的指针也能做到,这里只是想说明引用有这种用法,并且学了引用之后,就很少有人会用指针了,因为方便啊。)这里我们可以测试一下他的速度。
3.如果没有static, 你敢不敢这么干?是不能的!这样可能是很危险的。虽然在vs里面怎么写是对的,但是仅仅是这样写,因为vs在掉用完函数后,只是归还了这个空间的使用权,但是他没有销毁里面的数据,所以短暂是对的。
就比如下面的这传函数,只要有函数在栈上面去覆盖他,那他就是随机值了,在其他编译器下,可能不需要覆盖,就直接是随机值了。
4.引用做返回值(修改返回值和改变返回值)
1.如果你学过C语言的数据结构,在顺序表中(我这里为了方便就弄静态的数组了)。一个C语言,一个C++,你自己看看把,同样的操作,但是差距却很大。有人会说,C语言的指针可以,但是我们的学的还是左边这种C,说明那种指针返回可定过于繁琐,且没必要。
5.语法层面和汇编层面的引用。