引用的底层实现是通过指针来完成的,但编译器做了一些语言层面上的限制,从而产生了引用这个特性。
引用就是存在之物的另一个名字,它本身不是对象。不存在空引用(定义时就需要初始化),所以某些场合使用引用比指正更高效,因为引用肯定非空,而指针需要判断是不是空指针。
在函数传值时使用引用可以防止产生临时对象。而且让操作看起来更加自然,比如重载[]操作符时,返回的是一个元素的引用,如果返回一个指针,操作起来很不方便(见more effective C++ 条款一)。
在C++03及以前的标准,无法建立非常量引用,最多建立常量引用(所以别想通过给临时对象取一个别名,然后修改它)。但临时对象其实未必无法被修改,只是通过别的方式而已。
如下代码是错误的:
void f ( /*const*/ int& a){ cout<<
把const注释去掉就对了。