C ++ 11 표준 (ISO / IEC 14882 : 2011)의 내용은 다음과 § C.1.1
같습니다.
char* p = "abc"; // valid in C, invalid in C++
C ++의 경우 문자열 리터럴에 대한 포인터는 수정하려고하면 충돌이 발생하기 때문에 유해합니다. 그러나 C에서 왜 유효합니까?
C ++ 11도 말합니다 :
char* p = (char*)"abc"; // OK: cast added
즉, 캐스트가 첫 번째 명령문에 추가되면 유효합니다.
캐스트가 C ++에서 두 번째 명령문을 유효하게 만드는 이유는 무엇이며 첫 번째 명령문과 어떻게 다른가요? 여전히 해롭지 않습니까? 그렇다면 표준에서 괜찮다고 말한 이유는 무엇입니까?
OK
.
const
때문에 반드시 그렇지는 않았습니다 const
.
char[]
처음에 만들 었는지 전혀 모른다 . 두 번째는const_cast
변장입니다.