"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué la modificación de una constante mediante un puntero no constante produce un comportamiento indefinido?

¿Por qué la modificación de una constante mediante un puntero no constante produce un comportamiento indefinido?

Publicado el 2024-11-07
Navegar:645

Why Does Modifying a Constant through a Non-const Pointer Produce Undefined Behavior?

Modificación de una constante mediante un puntero no constante: profundizar en un comportamiento indefinido

En el fragmento de código proporcionado, expresa confusión sobre el comportamiento de modificar un entero constante (e) a través de un puntero no constante (w):

const int e = 2;

int* w = (int*) &e;  // Casting to remove const-ness
*w = 5;            // Modifying the value pointed to by w

Después de realizar esta modificación se observa que:

  • Mostrando el valor señalado por w ( cout w
  • Sin embargo, mostrar el valor de e (*cout

Además, observa que la dirección señalada por w es la misma que la dirección de e (cout cout e permanece sin cambios a pesar de la modificación realizada a través de w.

Este comportamiento surge del comportamiento indefinido que surge al modificar una constante a través de una no definida. -puntero constante. Una vez que realiza dicha modificación, el código ingresa a un territorio de comportamiento indefinido, donde se vuelve impredecible y depende de detalles de implementación específicos.

En este caso, parece que la modificación a través de w afecta a copia temporal de e en tiempo de ejecución, mientras que el e original permanece sin cambios. La razón de esto es que e se trata como una constante de tiempo de compilación y su valor está codificado en el código binario. Por lo tanto, cualquier modificación del tiempo de ejecución de w no afectará el e original.

Este comportamiento es específico de la implementación utilizada y no se debe confiar en él. La modificación de datos constantes mediante punteros no constantes se considera una mala práctica y debe evitarse. El enfoque correcto es utilizar una referencia no constante o crear una copia no constante de los datos que desea modificar.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3