在c++内部,**引用的本质是一个指针常量,**如 int * const ref = &a。引用一旦初始化后,就不可以改变指向。
指针常量,int * const ref = &a; const修饰的是 "ref "–> , ref 的值不可以改,即指针变量ref 的指向不可以改,ref = &b非法。但指针变量ref 指向的对象的值可以改,即*ref = 100合法。
讲解示例:
//发现是引用,转换为 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);
return 0;
}
结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。