const对变量类型加以限定,使得其具有常量性,只能执行不修改其内容的操作。
在类型转换运算符中,const_cast可以改变const类型的常量性,使得其可以修改。
下面是const_cast的指针转换、引用转换以及单纯的指针方法修改const类型
#include
int main()
{
const int* a = new int(1);
int* b = const_cast(a);
*b = 2;
printf("%p,%d,%p,%d\n",a,*a,b,*b);
const int c = 1;
int& d = const_cast(c);
d = 2;
const int* h = &c;
printf("%p,%d,%p,%d,%p,%d\n",&c,c,&d,d,h,*h);
const int e = 1;
const int* f = &e;
int* g = (int*)f;
*g = 2;
printf("%p,%d,%p,%d,%p,%d\n",&e,e,f,*f,g,*g);
return 0;
}
005E1798,2,005E1798,2
0028FF04,1,0028FF04,2,0028FF04,2
0028FF00,1,0028FF00,2,0028FF00,2
第二第三组看起来有些奇怪,其实我们也是成功修改了内存值,但是由于编译器的一些处理,使得我们通过变量名访问的时候依旧只访问到了初始值。(不同编译器可能结果不一样)
const_cast一般还是不要用最好,反正我觉得我可能用不着,也会尽量避免用它的情况。