Saya dapat memikirkan dua situasi di mana const_cast aman dan berguna (mungkin ada kasus valid lainnya).
Salah satunya adalah ketika Anda memiliki instance, referensi, atau pointer const, dan Anda ingin meneruskan pointer atau referensi ke API yang tidak benar, tetapi Anda TERTENTU tidak akan mengubah objek. Anda dapat const_cast penunjuk dan meneruskannya ke API, percaya bahwa itu tidak akan benar-benar mengubah apa pun. Sebagai contoh:
void log(char* text);
void my_func(const std::string& message)
{
log(const_cast<char*>(&message.c_str()));
}
Yang lainnya adalah jika Anda menggunakan kompiler lama yang tidak mengimplementasikan 'mutable', dan Anda ingin membuat kelas yang secara logis const tetapi bukan const bitwise. Anda bisa const_cast 'this' dalam metode const dan memodifikasi anggota kelas Anda.
class MyClass
{
char cached_data[10000];
bool cache_dirty;
public:
char getData(int index) const
{
if (cache_dirty)
{
MyClass* thisptr = const_cast<MyClass*>(this);
update_cache(thisptr->cached_data);
}
return cached_data[index];
}
};
const
objek aslinya melaluiconst
referensi / penunjuk de- ed. Sebaliknya, jika Anda hanyaconst_cast
ingin bekerja di sekitar API dengan spesifikasi yang buruk (atau, dalam kasus saya, malas) yang hanya menerima non-const
referensi tetapi hanya akan digunakan dalamconst
metode ... tidak ada masalah sama sekali.