Standar C ++ 11 (ISO / IEC 14882: 2011) mengatakan dalam § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Untuk C ++ tidak apa-apa sebagai pointer ke String Literal berbahaya karena setiap upaya untuk mengubahnya menyebabkan crash. Tetapi mengapa itu valid dalam C?
C ++ 11 juga mengatakan:
char* p = (char*)"abc"; // OK: cast added
Yang berarti bahwa jika para pemain ditambahkan ke pernyataan pertama itu menjadi valid.
Mengapa casting membuat pernyataan kedua valid dalam C ++ dan bagaimana perbedaannya dari yang pertama? Bukankah itu masih berbahaya? Jika itu masalahnya, mengapa standar mengatakan tidak apa-apa?
OK
.
const
, jadi mereka tentu tidak const
.
char[]
di tempat pertama. Yang kedua adalahconst_cast
penyamaran.