Obtener el mismo valor de la variable const incluso después de cambiarla a través de const_cast
Considere el siguiente fragmento de código:
int main()
{
const int i=3;
int *ptr;
ptr=const_cast<int*>(&i);
*ptr=5;
cout<<"i= "<<i<<endl; <------------------- statement 1
cout<<"*ptr= "<<*ptr<<endl; <------------- statement 2
return 0;
}
Estoy obteniendo la salida como:
i= 3
*ptr= 5
¿Por qué es el valor dei
¿No se cambia a través del puntero?
Sé que descartar la constancia de una variable que se declara explícitamente como constante y modificar su valor es 'Comportamiento indefinido'. Tengo curiosidad por saber: ¿Es algún mecanismo de optimización del compilador que "el compilador reemplaza la variable en el programa con el valor"? Significa que el compilador interpreta la declaración 1 como:
cout<<"i= "<<3<<endl;
Incluso si la declaración
ptr=const_cast<int*>(&i);
es reemplazado por
ptr=(int*)(&i);
Estoy obteniendo la misma salida:http://ideone.com/5lzJA