const char *pc;
char *p=const_cast<char*>(pc);
const_cast 运算符可以去掉对象的底层 const 性质 但是标准里面说 通过p写值是未定义的行为
我刚开始也觉得既然去掉const 又不能改值 那去掉有什么意义呢?
后来才知道 去掉const 不是为了修改const值 而是在作为参数传递给一个带有非const参数的函数时,让编译器不再检查它的const
#include <iostream>
using namespace std;
void fun(int &i)
{
cout << i << endl;
}
int main(void)
{
int d = 3;
const int &c = d;
fun(const_cast<int&>(c));
}
比如上述代码 c 是一个const引用 但是我的fun函数 要接收一个非const的引用 当直接传递 c 时会编译出错 因为常量引用 不能转换成非常量引用
这里就可以用到 const_cast 运算符来去掉const性质 告诉编译器不要检查它 就可以传入并通过编译了
这里举的例子或许并不恰当,只是为了说明const_cast不是为了改变常量的值