Как сделать так, чтобы моя функция strchr принимала оба массива 'const char' и 'char' в качестве первого параметра?
Вы можете изменить аргумент на const char*
. Это позволило бы передать оба указателя на char
, а также const char
.
Однако вы возвращаете неконстантный указатель на этот массив, чего не следует делать, если указатель на константный массив. Таким образом, при передаче const char*
ваша функция также должна возвращать const char*
И все же, как предопределенной функции "strchr" можно передавать массивы типов данных "const char" и "char" и работать просто отлично?
Есть две предопределенные функции std::strchr
. Тот, который принимает и возвращает char*
, а другой, который принимает и возвращает const char*
:
const char* strchr(const char* str, int ch);
char* strchr( char* str, int ch);
Если вы хотите вернуть char*
в случае аргумента char*
, вам нужно иметь разные функции для каждого случая, как в стандартной библиотеке. Вы можете использовать перегрузку, как в стандартной библиотеке, или использовать шаблон функции для генерации обоих вариантов без повторений:
template<class Char>
Char* my_strchr(Char *place_to_find, char what_to_find)
Обратите внимание, что версия функции на C объявлена char *strchr(const char *str, int ch)
. Это делает единственную функцию пригодной для использования в обоих случаях, но небезопасно, поскольку система типов не сможет помешать пользователю функции изменить хотя возвращенный неконстантный указатель, даже когда константный массив был передан в качестве аргумента.