一、c++中引用的语法是这样的:
int x = 100;
int& _x = x;
它的意思就是是给变量x起了一个别名,在以后的代码中,_x其实就是x,这两个是等价的。举个例子,在《唐伯虎点秋香》中,唐伯虎叫做华安,又叫做9527,其实这三个名字都是同一个人,引用就是这个意思。
注意事项:
引用初始化的时候一定要绑定一个变量;
引用一旦初始化,则终身为这个变量服务;
不能返回局部变量的引用,就像指针一样,不能返回局部变量的指针;
二、引用的几处应用
1、普通的引用
int x = 100;
int& _x = x;
这里还有一个问题,就是int& x = 100;如果写成这样,编译器会报错,对常数的引用必须加const修饰,const int& x = 100;2、作为函数的形参
int max(int& x,int& y),这样做的好处是没有对实参进行复制拷贝,提高了效率。
3、引用作为函数的返回值
对于这样一个函数int max(int& x,int& y),我们可以这样用int z = max(1,2),这很正常,我们都这样用,但是你绝对不能这样用max(1,2) = 100;也就是说,函数的返回值不能作为左值。但是如果写成这样int& max(jint& x,int& y)之后,max(1,2) = 100这句话立马就是合理的了。
#include <iostream>
using namespace std;
int& getmax(int& x1,int& y1){
return x1 > y1 ? x1 : y1;
}
void main(){
int x = 10;
int y = 123;
//int z = getmax(x,y);
int& z = getmax(x,y);//用引用来接,和不用引用来接
//int z = getmax(x, y);//对比一下,用引用来接返回值,和不用引用来接有什么区别
getmax(x,y) = 1000;//把z和y全部绑到一起
cout << z << endl;
cout << y <<endl;
}
上面的代码如果用引用来接,则输出的z和y都是1000,如果注释掉引用来接这一行,换成没有用引用来接,则输出的z和y是123,1000.
三、引用的实现
引用的特点就是:一个引用一旦引用了一个变量,就不能再去引用其他的变量了,但是引用的变量可以重新被赋值。基于上面的特点,我们来看两个指针:
int x = 100;
1:int const * pi = &x;
2:int * const pi = &x;
第一个指针表示这个指针pi还可以解除当前绑定,然后绑定到其他指针上,但是所绑定对象的值不能被重新赋进去。就是说如果有int y = 100的话,pi = &y是合法的,但是*pi = 200就是不合法的。
第二个指针和第一个相反,*pi = 200是合法的,但是pi = &y是不合法,根据这两个指针的性质,第二个指针就是引用的实现。