其实引用用一句话就可以说明白,就是指向变量的别名。
别名的意思就是除了名字不一样以外,其他一切都相同,包括地址。
那么有什么作用呢?
一般用在作为参数传递是防止产生无为的拷贝副本。
就是说 TYPE foo ( TYPE something) ( snip);// 1
和 TYPE foo ( TYPE &someting)( snip); // 2
在参数传递的时候,1,需要建立堆栈来作为TYPE 类型的临时存储区,而使用2的时候无需建立堆栈,只需要使用其地址就可以了。
当作为函数返回值的时候,可以返回一个变量引用来作为别名,这样的好处除了不需要副本拷贝以外,还可以得到自己“想要的”变量名字。:D
这篇Blog写得比较详细一些:
http://blog.vckbase.com/panic/archive/2005/03/27/4115.html最后,在C++ primer里面提到这样的事情:(P87底部)
double dval = 1024;
const int & ri = dval;
这样编译器可以变为:
double dval = 1024;
int temp = dval;
const int & ri = temp;
从下面的程序中可以看出:
- #include <iostream>
- using namespace std;
- int main(void){
- double a = 10;
- const double & testAd = a;
- const int & test= a;
- cout<<"a="<<&a<<endl;
- cout<<"testAD="<<&testAd<<endl;
- cout<<"test="<<&test<<endl;
- return 0;
- }
输出为:
a=0012FF78
testAD=0012FF78
test=0012FF6C
可以看出,转换以后的地址的确不相同,这样的引用已经不简单的是别名了。这也就是为什么要用const的原因。(不能用类型不相同的引用来操作)。