std :: string find是否要求pos小于字符串大小?

时间:2012-01-29 21:52:05

标签: c++ string stl stdstring

只需阅读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();

     

- at(xpos + I)== str.at(I)表示受控字符串的所有元素I.   通过str。

     

2返回:如果函数可以为xpos确定这样的值,则返回xpos。   否则,返回npos。

我正在读这个吗?

1 个答案:

答案 0 :(得分:6)

规范的措辞不要求pos小于字符串的长度。如果pos大于字符串的长度,则无法满足条件(1)的第一部分,因为如果pos <= xpos,则xpos + str.size() <= size()永远不会为真。因此,通过第(2)节,函数将返回npos。因此,如果索引超出范围,函数的行为仍然可以很好地定义。

希望这有帮助!