El estándar C ++ 11 (ISO / IEC 14882: 2011) dice en § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Para C ++ está bien, ya que un puntero a un String Literal es dañino ya que cualquier intento de modificarlo provoca un bloqueo. Pero, ¿por qué es válido en C?
El C ++ 11 también dice:
char* p = (char*)"abc"; // OK: cast added
Lo que significa que si se agrega un reparto a la primera declaración, se vuelve válido.
¿Por qué la conversión hace que la segunda declaración sea válida en C ++ y en qué se diferencia de la primera? ¿Todavía no es dañino? Si es así, ¿por qué la norma dice que está bien?
OK
.
const
, por lo que necesariamente no lo eran const
.
char[]
en primer lugar. El segundo es unconst_cast
disfraz.