引用与指针的区别

引用的底层实现是通过指针来完成的,但编译器做了一些语言层面上的限制,从而产生了引用这个特性。

引用就是存在之物的另一个名字,它本身不是对象。不存在空引用(定义时就需要初始化),所以某些场合使用引用比指正更高效,因为引用肯定非空,而指针需要判断是不是空指针。

在函数传值时使用引用可以防止产生临时对象。而且让操作看起来更加自然,比如重载[]操作符时,返回的是一个元素的引用,如果返回一个指针,操作起来很不方便(见more effective C++ 条款一)。

在C++03及以前的标准,无法建立非常量引用,最多建立常量引用(所以别想通过给临时对象取一个别名,然后修改它)。但临时对象其实未必无法被修改,只是通过别的方式而已。

如下代码是错误的:

void f ( /*const*/ int& a)
{
  cout<<a<<endl;  
}
int main()
{
   f(1);
   return 0;  
}

把const注释去掉就对了。

 

posted @ 2016-04-05 09:52  vaevaevae  阅读(108)  评论(0编辑  收藏  举报