Стандарт С++ 11 (ISO/IEC 14882: 2011) говорит в § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Для С++ это ОК как указатель на String Literal вреден, поскольку любая попытка его изменения приводит к сбою. Но почему это действительно в C?
В С++ 11 также говорится:
char* p = (char*)"abc"; // OK: cast added
Это означает, что если добавление в первый оператор будет добавлено, оно станет действительным.
Почему кастинг делает второй оператор действительным в С++ и чем он отличается от первого? Разве это еще не вредно? Если это так, почему стандарт сказал, что это нормально?