语法格式
int b = 0; //定义b变量 int& a = b; //给b变量取别名, 别名为a
引用相当于给变量取别名,上述代码中的a也指向b空间。
引用的特性
1,引用的对象可以不初始化,但引用必须初始化。换言之,创建引用的变量必须有其唯一指向的实体。
2,引用唯一实体后不可改变其指向,如果a是b的别名,a就不能是其他变量的别名。
引用和指针的区别
空间 | 初始化 | 指向 | 运算 | 安全性 | 其他 | |
指针 | 开空间 | 非必要 | 可更改指向 | 会作用于被引用的实体 | 不安全 | 无多级引用 |
引用 | 不开空间 | 必须初始化 | 不可更改指向 | 会移动一个类型 | 相对安全 | 有多级指针 |
int& Test() { int a = 0; return a; } int main() { int ret = Test(); return 0; }
引用做返回值
这样写是不安全的,a的生命周期只在Test函数的作用域里,出了作用域a可能会被其他数据覆盖。引用返回的不是a的值,而是a所指向空间的数据,但a可能会被其他数据覆盖,返回的不一定是0,所以说这样写是不安全的。
解决方案:把返回值改成静态变量。