• 5973阅读
  • 1回复

【原创】C++ Review 引用 [复制链接]

上一主题 下一主题
离线风中纸页
 
只看楼主 倒序阅读 楼主  发表于: 2006-02-06
其实引用用一句话就可以说明白,就是指向变量的别名。

别名的意思就是除了名字不一样以外,其他一切都相同,包括地址。

那么有什么作用呢?

一般用在作为参数传递是防止产生无为的拷贝副本。

就是说 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;

从下面的程序中可以看出:

  1. #include <iostream>
  2. using namespace std;
  3. int main(void){
  4. double a = 10;
  5. const double & testAd = a;
  6. const int & test= a;
  7. cout<<"a="<<&a<<endl;
  8. cout<<"testAD="<<&testAd<<endl;
  9. cout<<"test="<<&test<<endl;
  10. return 0;
  11. }


输出为:
a=0012FF78
testAD=0012FF78
test=0012FF6C

可以看出,转换以后的地址的确不相同,这样的引用已经不简单的是别名了。这也就是为什么要用const的原因。(不能用类型不相同的引用来操作)。
把问题先交给google,再交给你的朋友。谢谢。
离线sky_hao

只看该作者 1楼 发表于: 2006-02-17
讲的到位!
快速回复
限100 字节
 
上一个 下一个