引用机制
引用不是新变量,而是别名。编译器不会为它开辟内存,它和原变量共用同一块空间。就像李逵在家叫铁牛,江湖人称黑旋风,本质还是同一个人。
void TestRef() {
int a = 10;
int& ra = a; // 定义引用类型
printf("%p\n", &a);
printf("%p\n", &ra); // 地址相同
}
注意引用必须初始化,且类型要匹配。
引用特性
- 定义时必须初始化
- 一个变量可以有多个引用
- 引用一旦绑定,不可更改指向(再赋值是修改对象值,不是换目标)
int main() {
int a = 10;
int& b = a;
int& d = a;
int c = 20;
b = c; // 这里是将 c 的值赋给 a,b 依然指向 a
return 0;
}
常引用与生命周期
const 引用可以延长临时变量的生命周期。当绑定到临时对象时,只要引用还在,临时对象就不会销毁。
引用做参数与返回值
**传参:**避免大对象拷贝,提升效率。
void Swap(int& left, int& right) {
int temp = left;
left = right;
right = temp;
}
**返回值:**返回局部变量引用是常见陷阱。局部变量出作用域即销毁,返回其引用会导致悬空指针/引用。
// 错误示范
int& Add {
c = a + b;
c;
}
{
n = ;
n++;
n;
}


