Требует ли std :: string find, чтобы pos был меньше размера строки? - PullRequest
2 голосов
/ 30 января 2012

Просто читаем 21.3.6.1 basic_string :: find - и нет никаких упоминаний о том, что аргумент pos находится в пределах самой строки.

21.3.6.1 basic_string :: find

size_type find (const basic_string & str, size_type pos = 0) const;

1 Эффекты: определяет самую низкую позицию xposесли возможно, так, чтобы выполнялись оба из следующих условий:

- pos <= xpos и xpos + str.size () <= size (); </p>

- at (xpos + I)) == str.at (I) для всех элементов I строки, управляемой str.

2 Возвращает: xpos, если функция может определить такое значение для xpos.В противном случае возвращает npos.

Я правильно читаю?

1 Ответ

6 голосов
/ 30 января 2012

Формулировка спецификации не требует, чтобы pos был меньше длины строки.Если pos больше длины строки, то первая часть условия (1) не может быть выполнена, потому что если pos <= xpos, то xpos + str.size() <= size() никогда не может быть истинным.В результате, согласно предложению (2), функция вернет npos.Следовательно, если индекс выходит за пределы диапазона, поведение функции по-прежнему совершенно точно определено.

Надеюсь, это поможет!

...