estoy un poco confundido lo que sucedió en el siguiente código:Modificación de un const través de un puntero no constante
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;
En (1), w puntos a la dirección de correo. En (2), ese valor se cambió a 5. Sin embargo, cuando se muestran los valores de * w y e, sus valores son diferentes. Pero si imprime el valor de w puntero y & e, tienen el mismo valor/dirección.
¿Cómo es que e aún contenía 2, incluso si se cambió a 5? ¿Se almacenaron en una ubicación separada? O un temporal? Pero ¿cómo es que el valor señalado por w sigue siendo la dirección de e?
Estás en un terreno de comportamiento indefinido: cualquier cosa puede pasar. –
Mi mente está demasiado cansada para ver lo que está sucediendo, pero puede usar const_cast para esto. Si solo pidió comprender lo que está sucediendo, puede ignorar este comentario. – erelender
@erelender: Podría usar 'const_cast' para esto, pero no haría que el comportamiento sea menos indefinido. –