为什么std :: string.find(text,std :: string:npos)不返回npos?

Dav*_*kes 3 c++ std

我正在一个字符串中进行一系列搜索,并且沿着该行的某个地方将丢失其中一个字符串,并且我的搜索集将失败.

我曾预料到,一旦位置达到std :: string :: npos,它就会留在那里,但事实并非如此.将std :: string :: npos传递给std :: string.find似乎再次开始搜索

std::string str("frederick");
std::string::size_type pos = str.find("der",std::string::npos);
TS_ASSERT_EQUALS(pos, std::string::npos); // FAIL, 3 is returned
Run Code Online (Sandbox Code Playgroud)

为什么不指示字符串的结尾?

更新:意图是按顺序搜索一系列字符串,并在结尾检查结果

pos = str.find(string1, pos)
pos = str.find(string2, pos)
pos = str.find(string3, pos)
if (pos != std:string::npos)
{ // All strings found
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 10

查看规范,我认为您的实现中可能存在错误.

basic_string::find应该返回最低位置xpos,pos <= xpos以及xpos + str.size() <= size()at(xpos + I) == str.at(I)I控制的所有元素str.

basic_string::npos-1被转换为无符号类型,因此必须是该无符号类型可表示的最大数字.假设没有其他位置xpos甚至可以满足npos<= 的第一部分xpos并且find必须npos在失败时返回,据我所知,它npos是作为第二个参数basic_string::find传递时唯一有效的返回值npos.