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



只需阅读21.3.6.1 basic_string::find-并且没有提到pos参数在字符串本身的范围内。

21.3.6.1 basic_string::查找

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

1效果:如果可能,确定最低位置的xpos,以便获得以下两个条件:

--pos<=xpos和xpos+str.size()<=size();

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

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

我读对了吗?

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

希望这能有所帮助!

最新更新