首先知道c语言中const的用途,这个在之前的博客中有提到过。
https://blog.csdn.net/amumu_123/article/details/78360868
但是我们如果采用下面操作,则 const 修饰的常量还是可以被改变的。
const int a = 10;
int *p = (int *)&a;
*p = 20;
printf("a = %d\n",a);//a = 20;
当我们在c++中同样去执行这段代码
const int a = 10;
int *p = (int *)&a;
*p = 20;
cout << "a = "<< a<< endl;//a = 10
cout << "*p = "<< *p<< endl;//*p = 20
所以在c++中。const int a = 10;此时a是一个真正的常量。
实际上*p = 20;改变的是临时开辟的temp变量。
在c++中,常量是在一张符号表中管理的,每一个常量都有对应的key和value,上述例子中,key就是a,value就是10。
当我们对一个常量取地址,编译器会临时开辟一个空间temp,让这个指针存放这个临时空间的地址。