Lo standard C ++ 11 (ISO / IEC 14882: 2011) dice in § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Per il C ++ è OK come puntatore a un String Literal è dannoso poiché qualsiasi tentativo di modificarlo porta a un arresto anomalo. Ma perché è valido in C?
Il C ++ 11 dice anche:
char* p = (char*)"abc"; // OK: cast added
Ciò significa che se un cast viene aggiunto alla prima istruzione diventa valido.
Perché il casting rende valida la seconda istruzione in C ++ e in cosa differisce dalla prima? Non è ancora dannoso? Se è così, perché lo standard ha detto che è OK?
OK
.
const
, quindi necessariamente non lo erano const
.
char[]
in primo luogo reso letterale il tipo di stringa . Il secondo èconst_cast
sotto mentite spoglie.