Estoy tratando de cambiar el valor de una variable que se define como int const como a continuación.cambiando el valor de la variable const en C++
const int w = 10;
int* wp = const_cast <int*> (&w);
*wp = 20;
El valor de w no cambió y era 10 incluso después de la cesión, aunque se muestra como si ambos W y wp están apuntando en la misma ubicación de memoria. Pero yo soy capaz de que el cambio del valor de w, si está definida de la siguiente manera, mientras declarando
int i = 10;
const int w = i;
Si cambio de la declaración de i para que sea const como en
const int i = 10;
El valor de w doesn no cambias
En el primer caso, ¿cómo es que el valor de w no cambió, a pesar de que W y WP apuntan a la misma posición de memoria [que fue mi impresión que tengo al imprimir sus direcciones]
¿Qué diferencia ¿es al compilador que trata ambos casos de manera diferente?
¿Hay alguna forma de asegurarse de que w no pierda la consistencia, independientemente de la forma en que se defina?
Si un objeto se creó inicialmente como 'const', entonces no se puede (no debería)' const_cast' hacerlo a 'no-contr'; ese es un comportamiento indefinido Si un objeto se creó inicialmente como no 'const ', puede' const_cast' adelante y atrás como lo desee. –
En algunas implementaciones, escribir en un objeto 'const' puede bloquear su programa, si el contenido del objeto reside en una sección de solo lectura (por ejemplo,' .rodata' en oposición a '.data', donde los datos no 'const' se sienta). –
Nadie parece haber formulado la pregunta obvia: si desea cambiar el valor, ¿por qué marca la variable como 'const'? –