Sono un po 'confuso quello che è successo nel codice seguente:Modifica di un const tramite un puntatore non-const
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;
In (1), punti w all'indirizzo di posta. In (2), tale valore è stato modificato in 5. Tuttavia, quando sono stati visualizzati i valori di * w ed e, i loro valori sono diversi. Ma se si stampa il valore del puntatore w e & e, hanno lo stesso valore/indirizzo.
Come mai e ancora contenuto 2, anche se è stato modificato in 5? Sono stati conservati in un luogo separato? O un temporaneo? Ma come mai il valore puntato da w è ancora l'indirizzo di e?
Sei in una zona di comportamento non definito: può succedere di tutto. –
La mia mente è troppo stanca per vedere cosa sta succedendo, ma puoi usare const_cast per questo. Se hai chiesto solo di capire cosa sta succedendo, puoi ignorare questo commento. – erelender
@erelender: potresti usare 'const_cast' per questo, ma non renderebbe il comportamento meno indefinito. –