Стандарт 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
замаскированный.