const_cast只能改变运算对象的底层const,而且如果本来就是非底层常量类型,那么可以改;如果本身就是底层常量,那也改不了:
int i = 5;
int* p = &i;
const int* p1 = p;
//int* p2 = p1; //会报错:const int*类型不能初始化int*类型
int* p2 = const_cast<int*>(p1); //正确
const int* p3 = &i;
int* p4 = const_cast<int*>(p3);
*p2; //可以
//*p4; //不行,程序无法运行