C ++ 11 Standardı (ISO / IEC 14882: 2011) şöyle diyor § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
C ++ için, bir Dize Değişmezine bir işaretçi olarak zararlıdır, çünkü herhangi bir değişiklik denemesi çökmeye neden olur. Peki neden C'de geçerlidir?
C ++ 11 ayrıca şunları söylüyor:
char* p = (char*)"abc"; // OK: cast added
Bu, ilk ifadeye bir yayın eklenirse geçerli olacağı anlamına gelir.
Döküm neden ikinci ifadeyi C ++ 'da geçerli kılıyor ve birincisinden nasıl farklı? Hala zararlı değil mi? Durum buysa, standart neden iyi olduğunu söyledi?
OK
.
const
, bu yüzden mutlaka değildi const
.
char[]
ilk etapta bir dize değişmez türü yaptı bilmiyorum . İkincisiconst_cast
kılık değiştirmiş.