Почему я должен включить .c_str () в C ++ для определения длины строки? - PullRequest
0 голосов
/ 23 ноября 2018

Так как C является подмножеством C ++ Почему я не могу использовать int y = strlen (S);вместо int y = strlen (S.c_str ());в моей C ++ программе.Почему необходимо преобразовать строку в строку C?

PS: я знаю, что существуют другие методы извлечения длины строки, такие как int y = S.length ();Но int x = temp.S.length ();кажется более сложным и подверженным синтаксическим ошибкам, чем int x = strlen (temp.S);

Это смущает меня, когда я недавно перешел с C на C ++

Заранее спасибо

1 Ответ

0 голосов
/ 23 ноября 2018

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

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

Преобразование в строку в стиле C могло бы быть предоставлено операторомconst char * (), а не c_str ().Это обеспечило бы удобство неявного преобразования за счет неожиданностей в случаях, когда такое преобразование было неожиданным.

...