C++ 抛弃常数

示例

可以使用const_cast关键字将指向const对象的指针转换为指向非const对象的指针。在这里,我们const_cast用来调用不是const正确的函数。char*即使它从未通过指针写入,它也只接受非常量参数:

void bad_strlen(char*);
const char* s = "hello, world!";
bad_strlen(s);                    // 编译错误
bad_strlen(const_cast<char*>(s)); // 好的,但是最好让bad_strlen接受const char *

const_cast 引用类型可以用于将const限定的左值转换为非const限定的值。

const_cast这很危险,因为它使C ++类型系统无法阻止您尝试修改const对象。这样做会导致未定义的行为。

const int x = 123;
int& mutable_x = const_cast<int&>(x);
mutable_x = 456; // 可能会编译,但会产生*未定义的行为*