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_castdisfraz.