Standard C ++ 11 (ISO / IEC 14882: 2011) mówi w § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
W przypadku C ++ jest to w porządku, ponieważ wskaźnik do literału ciągu jest szkodliwy, ponieważ każda próba jego modyfikacji prowadzi do awarii. Ale dlaczego jest ważny w C?
C ++ 11 mówi również:
char* p = (char*)"abc"; // OK: cast added
Co oznacza, że jeśli rzut zostanie dodany do pierwszej instrukcji, stanie się ważny.
Dlaczego rzutowanie sprawia, że druga instrukcja jest ważna w C ++ i czym różni się od pierwszej? Czy to nadal nie jest szkodliwe? Jeśli tak, to dlaczego norma mówi, że jest OK?
OK
.
const
, więc niekoniecznie były const
.
char[]
w pierwszej kolejności. Drugi toconst_cast
w przebraniu.