1.引用的本质
C++中的引用可以理解为对一个变量起了一个别名,C++在引用时等效于一个指针常量。
int a = 5;
int& ref = a;
ref = 10;
cout << a << endl;
int a = 5;
int* const p = &a;
*p = 10;
cout<< a << endl;
在进行使用时,ref等效为指针常量的解引用*p。
2.指针常量与常量指针
指针常量的本质是一个常量,即指针的值-所指向的内存地址不能发生变化,可以通过解引用修改指向内存中所存的值,不能通过取地址符使其指向其他地址。
int b = 1;
int* const p = &a;
p = &b; //失败 不能指向变量b所在地址
*p = b; //成功 修改了指向内存存放的值
常量指针的本质是一个指针,是一个指向常量的指针,指针指向可以修改,不能通过解引用修改其指向的值。
int b = 1;
const int* p = &a;
p = &b; //成功 将指针p改指向了变量b的地址
*p = b; //失败 该地址存放一常量 不能修改值
3.常量引用
常量引用主要用在函数的形参中,可以避免引用传入的值被修改。此外,还可以使一个值直接被引用。
//错误 引用的本质使得右边应是一个内存空间的地址。
int& ref = 10;
//可以使用常量引用来使其等效为 int temp = 10; const int int& ref = temp;
const int int& ref = 10;
//可以放在形参中防止修改
void func(const int& a)
{
a+=1; //错误 不能被修改
}