jestem trochę zdezorientowany co się stało w poniższym kodzie:Modyfikacja przez const const wskaźnik
const int e = 2;
int* w = (int*) &e; // (1) cast to remove const-ness
*w = 5; // (2)
cout << *w << endl; // (3) outputs 5
cout << e << endl; // (4) outputs 2
cout << "w = " << w << endl; // (5) w points to the address of e
cout << "&e = " << &e << endl;
W (1), białe punkty na adres e. W (2) wartość ta została zmieniona na 5. Jednakże, gdy wyświetlane były wartości * w i e, ich wartości są różne. Ale jeśli drukujesz wartość wskaźnika w i & e, mają one tę samą wartość/adres.
Jak to możliwe, że nadal zawiera 2, nawet jeśli zostało zmienione na 5? Czy były przechowywane w oddzielnej lokalizacji? A może tymczasowy? Ale dlaczego wartością wskazywaną przez w wciąż jest adres e?
Masz nieokreślone zachowanie - wszystko może się zdarzyć. –
Mój umysł jest zbyt zmęczony, aby zobaczyć, co się dzieje, ale możesz użyć do tego const_cast. Jeśli poprosiłeś o zrozumienie, co się dzieje, możesz zignorować ten komentarz. – erelender
@erelender: Do tego można użyć 'const_cast', ale nie spowoduje to, że zachowanie będzie mniej nieokreślone. –