首先看下面代码:
int main()
{
int a = 10;
int &b =a;
b = 20;
std::cout << a << std::endl;
std::cout << b << std::endl;
}
程序的运行结果结果是20,20。而不是10,20。只是为什么呢?
这里我们就要讲一下引用的概念了,引用是变量的别名,具体点就是引用是变量内存单元的别名,其底层是通过指针来实现的。
那么引用都有哪些用法呢?下面让我们来研究研究!
先来看看下面代码是否正确
int &b; //1
int &b = 10; //2
其中1是错误的,未对引用进行初始化,2也是错误的,不能引用常量,因为常量属于系统内置数据,存储在寄存器上,并没有存储在内存单元上,所以无法对其引用。
总结一下引用的特点就是
- 引用一定要初始化
- 不能引用无法取地址的值
- 引用不能改变
- 引用只能使用引用变量所引用的变量(内存单元)
值得注意的是,不能返回局部变量的地址或引用。
除此之外,使用引用时,引用不参与类型,但是引用的使用依赖于类型。而且,使用实例化对象最形参时,使用引用可以减少系统调用构造函数和析构函数的次数,从而提高函数效率。
const & 称为常引用,常引用的特点如下:
- 常引用可以引用无法取地址的值
- 无法取地址的值生成临时量
- 常引用可以引用临时量
最后,引用还可以将临时对象提升为和引用变量相同的生存周期,从而提升临时对象的生存周期。