Saya akan berbicara dengan C ++, di mana perbedaan ini paling relevan.
Seperti yang Anda catat dengan benar, kekekalan berarti bahwa suatu objek tidak dapat berubah sama sekali setelah penciptaannya. Penciptaan ini tentu saja dapat terjadi pada saat runtime, yaitu, suatu constobjek tidak harus berupa konstanta waktu kompilasi. Dalam C ++, objek tidak dapat diubah jika (1) dan (2) atau (3) terpenuhi:
Itu tidak memiliki anggota menyatakan mutableyang dimutasi oleh constfungsi anggota
Dinyatakan const
constfungsi anggota tidak digunakan const_castuntuk menghapus constkualifikasi untuk mengubah anggota mana pun
Namun, Anda juga dapat mempertimbangkan pengubah akses: jika suatu operasi secara internal mengubah sebuah instance, tetapi tidak memiliki efek pada keadaan instance yang dapat diamati melalui antarmuka publiknya, maka objek tersebut “secara logika tidak dapat diubah”.
Jadi C ++ menyediakan alat yang diperlukan untuk membuat objek yang tidak dapat diubah, tetapi seperti kebanyakan semua yang ada di C ++, alat tersebut hanya cukup memadai, dan membutuhkan ketekunan untuk benar-benar menggunakannya. Keadaan instance tidak harus terbatas pada variabel anggota instance — karena C ++ tidak menyediakan cara untuk menegakkan transparansi referensial, ia dapat menyertakan status global atau kelas juga.
constjuga memiliki fungsi lain di C ++: untuk memenuhi syarat referensi dan petunjuk. Sebuah constreferensi dapat merujuk ke non constobjek. Adalah sah (meskipun tidak secara umum tidak perlu atau disarankan) untuk digunakan const_castuntuk memutasi suatu objek melalui constreferensi, jika dan hanya jika objek tersebut dinyatakan non- const:
int i = 4; // Non-const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Legal.
Dan tentu saja itu perilaku yang tidak terdefinisi untuk bermutasi constobjek:
const int i = 4; // const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Illegal.
consttidak ada di setiap bahasa, dan ketidakmampuan dan keabadian tidak ada di setiap bahasa sehingga membuat bahasa ini agonistik tidak berlaku. Ini hanya khusus bahasa di mana konsep-konsep ini berlaku.