Porozmawiam z C ++, gdzie ta różnica jest najbardziej istotna.
Jak słusznie zauważysz, niezmienny oznacza, że obiekt nie może się w ogóle zmienić po jego utworzeniu. To tworzenie może oczywiście nastąpić w czasie wykonywania, tzn. constObiekt niekoniecznie musi być stałą czasową kompilacji. W C ++ obiekt jest niezmienny, jeśli spełnione są (1) i (2) lub (3):
Nie ma zadeklarowanych członków mutablezmutowanych przez constfunkcje członka
Zostało zadeklarowane const
constfunkcje członków nie służą const_castdo usuwania constkwalifikacji w celu mutowania jakichkolwiek członków
Można jednak również rozważyć modyfikatory dostępu: jeśli operacja mutuje instancję wewnętrznie, ale nie ma wpływu na stan instancji obserwowalny przez jej publiczny interfejs, obiekt jest „logicznie niezmienny”.
Tak więc C ++ zapewnia narzędzia niezbędne do tworzenia niezmiennych obiektów, ale podobnie jak większość wszystkiego w C ++, narzędzia są tylko w minimalnym stopniu wystarczające i wymagają staranności, aby móc ich używać. Stan instancji niekoniecznie ogranicza się do zmiennych składowych instancji - ponieważ C ++ nie zapewnia sposobu wymuszania przejrzystości referencyjnej, może również obejmować stan globalny lub klasowy.
constma także inną funkcję w C ++: kwalifikowanie referencji i wskaźników. constOdniesienia może odnosić się do nie- constprzedmiotu. Używanie const_castdo mutowania obiektu za pomocą constodwołania jest legalne (choć nie jest to generalnie konieczne lub wskazane) , i tylko wtedy , gdy obiekt ten jest zadeklarowany jako inny niż const:
int i = 4; // Non-const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Legal.
I oczywiście mutowanie constobiektu jest niezdefiniowane :
const int i = 4; // const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Illegal.
constnie istnieje w każdym języku, a zmienność i niezmienność nie istnieje w każdym języku, więc sprawienie, by ten język był agonistyczny, nie ma zastosowania. Jest on specyficzny dla języka tylko wtedy, gdy te pojęcia mają zastosowanie.