一、啥针啊引的,穿针引线呗?
引用,简单来说就是为对象起了一个别名,可以用别名来等同于操作对象。
int i =1;
int &r = i; //r指向i(r是i的别名,可以通过操作r来改变i的值)、
r=2;
cout<<r<<" "<<i<<" "<<endl; //r和i的值都为2
通俗的讲,为引用赋值,实际上就是将值赋给了与引用绑定的对象。获取引用的值,实际上就是获取了与引用绑定的对象的值。但是引用本身不是一个对象,所以不能定义引用的引用。
另外引用必须要被初始化,一旦初始化完成,引用将和它的初始值对象一直绑定在一起,因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
引用的还有一个比较重要的点就是引用的类型与之要绑定的对象严格匹配。
int &r; //错误,引用必须被初始化
int &r=10; //错误,引用类型的初始值必须是一个对象
int i=10,&r=i; //正确,r是一个引用,与i绑定在了一起,i是一个int
int j=0;
int& r=j,p=j; //正确,r是一个引用,与j绑定,p是一个int
//不同类型无法绑定,类型要严格匹配
int i=0;
double &r=i; //错误,引用类型为double,对象类型为int
指针与引用类似,也实现了对其他对象的间接访问。但是,与引用对比,又有很多不同点,其一,指针本身就是一个对象,允许对指针赋值和拷贝,而且还可以先后指向不同的对象(引用一旦绑定就不能修改了);其二,指针无需再定义的时候赋初值。
参考资料
指针、引用、const