抛弃常数
可以使用 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*