const_cast kullanımının benim bildiğim iki tane geçerli kullanım alanı var:
1) Bazan bir nesnenin effektif değeri değişmiyorken, iç yapısındaki bazı değişkenlerin değerinin değişmesi gerekebilir. Örneğin bir nesnenin adresi, bir const pointer olarak bir fonksiyona giriyor. Bu fonksiyonda, o nesnenin durumunu okuyoruz, ve bu okuma olduğu için sorun yok. Ama nesnenin durumunun kaç kere okunduğunu da nesnenin kendisinin takip etmesini istiyoruz. Bu durumda, her durum okuma yapıldığında nesnenin içindeki bir değişken (durum okuma sayacı) değişecek, ama pointer const, değiştiremiyoruz ... İşte bu tip sorunları çözmek için const_cast kullanabiliriz. Programcı olarak, biz biliyoruz ki, o nesnenin durumu aslında değişmiyor. Biz sadece okuma sayısını takip etmek için bir değişkeni değiştiriyoruz. Belki de bu işi programı debug ederken istiyoruz, ve bir #ifdef ile sadece gerektiğinde bu sayma işini ve const_cast'i devreye sokuyoruz.
2) C'nin ana kütüphanesi olan ve C++ tarafından da kullanılan "C runtime library" de bazı fonksiyonlar vardır, aslında kendilerine verilen buffer'da bir değişiklik yapmadıkları halde, fonksiyonların prototiplerinde bu buffer'lar const olarak işaretli değildir (örnek, writev fonksiyonu). Çünkü bu fonksiyonlar çok eskidir, ve o zamanlar bu const olayının önemi günümüzde olduğu kadar anlaşılmamıştı, o yüzden de kimse fonksiyon prototiplerinde const olayına o kadar önem vermiyordu. Ama günümüzde bu çok önemli, ve biz sırf bu fonksiyon böyle tanımlanmış diye kendi fonksiyonumuzu const'suz bırakmak istemiyoruz. İşte bu durumda, kendi fonksiyonumuzun prototiplerini const olarak tanımlarız, ve fonksiyonun içinde de const_cast ile const'luğunu kaldırıp bu eski, tarihi kütüphane fonksiyonunu çağırırız. Bunun gibi başka özensiz yazılmış kütüphanelerde de, kendisine giren pointer'i sadece okuma için kullanan, ama const olarak işaretlenmemiş fonksiyonlar olabilir. Gidip de bu kütüphanenin kaynak kodunu değiştireceğimize, const_cast ile sorunu çözebiliriz.