C++中的const的理解和使用
之前对于顶层const和底层const的理解,总是傻傻分不清,记不住,只能靠“左定值右定向”来记忆用法;
最近在温故而知新的时候,才觉得自己以前编写代码的方式不好适合理解,才导致每次都要想很久
C++类型变量声明,普通的类型变量声明没啥区别例如int iVal,声明一个整型变量,但是对于引用和指针类型,
以前喜欢的写法是int& iRVal和int* pVal,当然这种写法并没有什么问题,只是对于类型限定符,例如const, volatile、static附加理解不太友好,更方便理解的应该是int &iRVal,int *pVal,拆分理解的时候比较方便。
理解代码示例
void Test()
{
int i = 0;
int iTemp = -1;
/*
* 拆分看成int 和* const pVal,
* 即一个常量指针,指向地址里面的值是int类型;指向不能变更
* 但是可以改变指向对象的值,可以改变i的值
*/
int *const pVal = &i;
std::cout << "i:" << i << '\t' << "pVal:" << pVal;
*pVal = 1;//可以改变对象值
//pVal = &iTemp;//不可以改变指针指向
std::cout << "i:" << i << '\t' << "pVal:" << pVal << std::endl;
/*
* 拆分可以看成const int 和*pCVal,
* 即一个指针, 指向地址里面的值是const int类型,值不能修改
* 但是可以改变指针的指向,指向另一个对象
*/
const int *pCVal = &i;
std::cout << "i:" << i << '\t' << "pCVal:" << pCVal;
//*pCVal = 2;//不能修改值
pCVal = &iTemp;//可以指向另一个对象
std::cout << "i:" << i << '\t' << "pCVal:" << pCVal << std::endl;
/*
* 拆分可以看成const int 和*const pCCVal,常量指针指向常量值
*/
const int *const pCCVal = &i;
//*pCCVal = 3;//不能修改值
//pCCVal = &iTemp;//不能修改指针指向
std::cout << "i:" << i << '\t' << "pCCVal:" << pCCVal<< std::endl;
}
输出结果如图

浙公网安备 33010602011771号