C ++ strlen для класса String - PullRequest
2 голосов
/ 11 апреля 2011

Как работает метод C ++ length() для класса std::string?Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 апреля 2011

Класс std::string имеет несколько конструкторов, один из которых принимает как const char* необработанную строку C, так и длину size_t, а другой - только const char* необработанную строку C. Для первого заданная длина сохраняется, а для второго длина вычисляется один раз, вызывая strlen или выполняя эквивалентное вычисление. Вызов std::string::length()const просто возвращает ранее вычисленное значение. Он не пересчитывается каждый раз, когда вызывается.

2 голосов
/ 11 апреля 2011

Большинство строковых классов для C ++ хранят длину строки в отдельном члене, поэтому их метод length() просто возвращает это кэшированное значение.

В первую очередь вычислить длину строки с нулевым символом в конце: начните с первого элемента и продолжайте увеличивать счетчик, пока не достигнете двоичного значения 0, которое обозначает конец строки. Именно это и делает strlen.

1 голос
/ 11 апреля 2011

Это не работает на большинстве реализаций.Он просто обманывает , возвращая значение, которое другие методы стремились трудно сохранить:

Из libstdc ++ string.h:

///  Returns the number of characters in the string, not including any
///  null-termination.
size_type
length() const
{ return _M_rep()->_M_length; }

То же самоебывает в Java, кстати.Видимо length() методы это обычные читеры ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...