抛弃常数

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

void bad_strlen(char*);
const char* s = "hello, world!";
bad_strlen(s);                    // compile error
bad_strlen(const_cast<char*>(s)); // OK, but it's better to make bad_strlen accept const char*

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

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

const int x = 123;
int& mutable_x = const_cast<int&>(x);
mutable_x = 456; // may compile, but produces *undefined behavior*