引用本质:引用的本质在 c++ 内部实现是一个指针常量。
代码中 int& ref = a;
可以理解为 int* const ref = &a;
(指针常量)。
指针常量:指针指向不可变(绑定 a
后,不能再指向其他变量),但可以通过指针修改所指的值。
引用:本质是变量的 “别名”,操作引用就是直接操作原变量。
#include <iostream>
using namespace std;//发现是引用,转换为 int* const ref = &a;
void func(int& ref) {ref = 100; // ref是引用,转换为*ref = 100}
int main() {int a = 10;//自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明了为什么引用不可更改int& ref = a;ref = 20; //内部发现ref是引用,自动帮我们转换为:*ref = 20;cout << "a:" << a << endl;cout << "ref:" << ref << endl;func(a);//调用函数func后cout << "a:" << a << endl;cout << "ref:" << ref << endl;return 0;
}
ref = 20;
表面是给引用 ref
赋值,实际会自动转换为 *ref = 20;
(修改 a
的值)。此时 a
变为 20
。
调用 func(a);
func
中 ref = 100;
(参数 ref
是引用),同样转换为修改原变量 a
的值,a
变为 100
。
初始 a = 10
,经 ref = 20;
后 a
变 20
,再经 func(a)
中 ref = 100;
,最终 a
为 100
。
代码验证: