A pointer to a const object can be converted to a pointer to non-const object using the
const_cast keyword. Here we use
const_cast to call a function that is not const-correct. It only accepts a non-const
char* argument even though it never writes through the pointer:
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 to reference type can be used to convert a const-qualified lvalue into a non-const-qualified value.
const_cast is dangerous because it makes it impossible for the C++ type system to prevent you from trying to modify a const object. Doing so results in undefined behavior.
const int x = 123; int& mutable_x = const_cast<int&>(x); mutable_x = 456; // may compile, but produces *undefined behavior*