Je pense à deux situations où const_cast est utile (il peut y avoir d'autres cas).
C'est quand vous avez un const exemple, de référence ou pointeur, et que vous souhaitez passer un pointeur ou une référence à une API qui n'est pas const-correct, mais que vous êtes CERTAIN de ne pas modifier l'objet. Vous pouvez const_cast le pointeur et le transmettre à l'API, en espérant qu'il ne sera pas vraiment changer quoi que ce soit. Par exemple:
void log(char* text); // Won't change text -- just const-incorrect
void my_func(const std::string& message)
{
log(const_cast<char*>(&message.c_str()));
}
L'autre est si vous utilisez un vieux compilateur de ne pas mettre en oeuvre une "mutables", et vous souhaitez créer une classe qui est logiquement const mais pas au niveau du bit const. Vous pouvez const_cast " il " au sein d'un const méthode et de modifier les membres de votre classe.
class MyClass
{
char cached_data[10000]; // should be mutable
bool cache_dirty; // should also be mutable
public:
char getData(int index) const
{
if (cache_dirty)
{
MyClass* thisptr = const_cast<MyClass*>(this);
update_cache(thisptr->cached_data);
}
return cached_data[index];
}
};