Źle rozumiesz ;)
Nie możesz modyfikować const
obiektów1. const
wskaźnik/referencja to tylko uchwyt. Możesz mieć const wskaźnik na zmienną:
int a = 42;
int const* a_ptr = &a;
W takim przypadku nie możesz zmodyfikować a
poprzez a_ptr
, ale możesz odczytać jej wartość. const_cast
pozwala w tym wypadku na modyfikację a
poprzez a_ptr
. Jeśli jednak a
jest faktycznie stałą, taka modyfikacja jest nielegalna.
Bardziej na chłopski rozum: kompilator widząc cout << stala << endl
w Twoim kodzie pomyślał:
ha! stala
jest stała, więc zamiast wrzucać instrukcję czytania z pamięci, wrzucę bezpośrednio do kodu jej wartość, czyli wypluję cout << 3 << endl;
- w końcu stała = 3
, a ponieważ jest stała, to nigdy nie zostanie zmieniona, więc śmiało mogę podmienić!
1poza składowymi klas oznaczonymi jako mutable
, ale to nie ma znaczenia w tym temacie