跳到主要内容

引用

概念

引用即为某个已存在的变量取别名,引用变量与被引用变量公用一块内存空间。类似于给一个人取一个绰号。引用可以用如下的方式声明

int test = 1;
int& rename_test = test; //rename_test是test的引用
const double& rename_double_test = test; //rename_double_test是test的常引用

特性

引用必须初始化

引用实质为“取别名”,故在取别名前必须已有名字,那么其实也要求了被引用的必须为一个对象。

一旦引用一个对象将无法引用其他对象

一般在初始化变量时,初始值会被拷贝到新建对象,而在定义引用时则是将初始值与引用进行绑定,故引用一旦引用一个对象将无法引用其他对象,对引用的赋值实质为对被引用对象的赋值。也就是无法对引用指向的对象进行更改。例如

int test = 1,number = 0;
int& rename_test = test; //rename_test是test的引用
rename_test = number; //只会把number的值赋值给rename_test(test)。

一个变量可以有多个引用

const(常)引用

const引用即将引用与const对象绑定。无法通过修改const引用修改被引用的const对象。例如

const int test = 1;
const int &r_test1 = test;
int &r_test2 = test;//!不能将非常量引用指向常量对象,将被引用对象的只读特性改变为可读可写,是权限的放大,不被允许,这里会报错
int test = 2048;
const int &r_test4 = test3;//const引用可引用非常量对象,允许权限的缩小。

左值引用和右值引用

int& a = 10; //错误
int&& b = 10;// 通过编译