Der C ++ 11-Standard (ISO / IEC 14882: 2011) lautet § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Für C ++ ist es in Ordnung, da ein Zeiger auf ein String-Literal schädlich ist, da jeder Versuch, es zu ändern, zu einem Absturz führt. Aber warum ist es in C gültig?
Das C ++ 11 sagt auch:
char* p = (char*)"abc"; // OK: cast added
Das heißt, wenn eine Besetzung zur ersten Anweisung hinzugefügt wird, wird sie gültig.
Warum macht das Casting die zweite Anweisung in C ++ gültig und wie unterscheidet sie sich von der ersten? Ist es nicht immer noch schädlich? Wenn dies der Fall ist, warum hat der Standard dann gesagt, dass es in Ordnung ist?
OK
.
const
, also waren sie es notwendigerweise nicht const
.
char[]
hat. Der zweite ist eineconst_cast
Verkleidung.