strlen
функция принимает в качестве параметра a const char *
, а не std::string
.Это два разных типа для компилятора C ++.Он отличается от C-компилятора тем, что поддерживает перегрузку функций и строго проверяет типы параметров.С этой целью метод c_str()
класса std::string
возвращает требуемый указатель, чтобы сделать его совместимым с унаследованными функциями, такими как strlen
.
. Также стоит упомянуть, что он мог быть реализован таким образомчто он мог бы поддерживать неявное преобразование в const char *
, чтобы разработчику не требовалось вызывать метод c_str()
каждый раз, когда он хотел бы получить эту функциональность.Этот аспект был специально рассмотрен изобретателем C ++ Бьярном Страуструпом в его подробной книге Язык программирования C ++ :
Преобразование в строку в стиле C могло бы быть предоставлено операторомconst char * (), а не c_str ().Это обеспечило бы удобство неявного преобразования за счет неожиданностей в случаях, когда такое преобразование было неожиданным.