Hola, muy buenas. El caso es que acabo de encontrarme con este operador, el cual me parece un tanto curioso. Bueno, supongo que cada uno, cuando ha visto este operador, se ha hecho la pregunta ¿podré modificar el valor de una constante? Bueno, pues para probarlo, he elaborado el siguiente código:
Código
#include <iostream> int main() { const int value_a = 5; int *value_b = NULL; value_b = const_cast<int *>(&value_a); *value_b = 6; std::cout << "&value_a = " << &value_a << std::endl; // Imprimimos direcciones std::cout << " value_b = " << value_b << std::endl; std::cout << std::endl; std::cout << " value_a = " << value_a << std::endl; // Imprimimos valores std::cout << "*value_b = " << *value_b; std::cin.get(); return 0; }
El resultado que he obtenido, es cuanto menos curioso:
Citar
&value_a = 0x9ffe34
value_b = 0x9ffe34
value_a = 5
*value_b = 6
value_b = 0x9ffe34
value_a = 5
*value_b = 6
Bueno, analicemos. Las dos variables, efectivamente, tienen la misma dirección (así que el casting parece haberse computado correctamente). La cosa es que para dos mismas direcciones de dos variables, ¡tenemos dos valores diferentes!
La duda, en resumidas cuentas es, ¿cómo es posible que para una misma dirección de memoria haya dos valores diferentes almacenados? ¿o a lo mejor sucede otra cosa?
Gracias