Предположим, что возвращаемое значение из strstr
было char*
, с первым параметром const char*
, как в C. Тогда вы могли бы написать:
const char *s = "hello, world";
strstr(s, "hello")[0] = 'j';
Код компилируется и запускается (с неопределенным поведением), но это ошибка, которую const
специально разработал, чтобы избежать. Вы конвертировали const char*
в char*
без приведения.
C на самом деле ничего не может с этим поделать: если strstr вернул const char*
, то вам пришлось бы явно привести к неконстантному типу в случае, когда ввод неконстантный, и вы хотите изменить строку. Поскольку C ++ имеет перегрузку функций, он может (и делает) заглушить лазейку и заставить оба случая работать правильно. Следовательно, в C ++ вышеприведенный код не компилируется, как и ваш пример кода.