C++

advertencia: ISO C ++ prohíbe convertir una constante de cadena en 'char *' [-Wwrite-strings]

Warning Iso C Forbids Converting String Constant Tochar

Claramente especificado en C ++ 11

|_+_|

Si realiza una asignación de este tipo, el compilador saltará de una advertencia, como un título. Pero si cambia a lo siguiente, pasará una advertencia



|_+_|

O así:



|_+_|

¿Qué diablos es todo esto? De hecho, cuando aprendemos c o C ++, sabemos que si los tipos de variables en los lados iguales son diferentes al asignar operaciones, el compilador realizará una operación llamada conversión implícita para que las variables sean asignables.

Existe tal problema en nuestra expresión anterior, el 'abc' en el lado derecho del signo igual es una constante invariante, llamada literal de cadena en C ++, tipo const char *, Y p es un puntero char. ¿Qué pasa si fuerza un valor? Así es, la constante de la derecha se convierte en un puntero y el resultado es que estamos modificando una constante constante. El compilador y el sistema operativo determinarán el resultado de la compilación y la ejecución. Algunos compiladores pasarán, algunos arrojarán excepciones, e incluso si también lo son, es posible que se eliminen debido a la sensibilidad del sistema operativo.

La operación de asignar un literal de cadena directamente a un puntero como este se considera desaprobada por el desarrollador, pero dado que muchos de los códigos anteriores tienen este hábito, se retiene por compatibilidad.