Стандарт C ++ 11 (ISO / IEC 14882: 2011) говорить § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Для C ++ це нормально, оскільки вказівник на Stral Literal є шкідливим, оскільки будь-яка спроба змінити його призводить до збоїв. Але чому він дійсний у С?
С ++ 11 також говорить:
char* p = (char*)"abc"; // OK: cast added
Що означає, що якщо додаток до першого твердження додається, він стає дійсним.
Чому кастинг робить друге твердження дійсним у C ++ і чим він відрізняється від першого? Хіба це ще не шкідливо? Якщо це так, то чому стандарт сказав, що це нормально?
OK
.
const
, тому їх обов'язково не було const
.
char[]
в першу чергу. Другий - цеconst_cast
маскування.