Рассмотрим функцию, подобную strstr
, которая, если получить указатель на часть объекта, содержащего строку, возвращает указатель на возможно отличную часть того же объекта. Если в метод передается указатель на область памяти, доступную только для чтения, он вернет указатель на область памяти, доступную только для чтения; аналогично, если ему дается указатель на область для записи, он возвращает указатель на область для записи.
В C нет способа заставить функцию возвращать const char *
, если ей дано const char *
, и возвращать обычную char *
, когда ей дано обычное char *
. Чтобы быть совместимым с тем, как strstr
работал до того, как к языку была добавлена идея const char *
, он должен преобразовать константный указатель в неконстантный указатель. Хотя верно и то, что библиотечная функция strstr
может иметь право выполнять такое приведение, даже если пользовательский код не может этого сделать, такой же шаблон встречается достаточно часто в пользовательском коде, поэтому было бы целесообразно запретить его.