c ++:string :: find的行为是否为空输入字符串定义良好

use*_*183 4 c++ string language-lawyer

以下代码片段在我的编译器(visual studio)上始终返回true.但这种行为是否定义良好且可移植?

bool return_always_true(std::string const& str)
{
    return str.find("") != std::string::npos;
}

int main(){
     cout << boolapha << return_always_true("") << endl
          << return_always_true("oxylottl") << endl
          << return_always_true("lorem ipsum") << endl;
 //true true true
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ica 8

我发现cppreference.com比标准更容易阅读.引用它们:

找到第一个等于str......的子串

形式上,如果满足以下所有条件,str则称子块位于位置xpos:

  1. xpos >= pos
  2. xpos + str.size() <= size()
  3. 所有职位nstr,Traits::eq(at(xpos+n), str.at(n))

空字符串将始终在目标字符串的开头匹配,因为

  1. 0> = 0
  2. 0 + 0 <= size()
  3. 没有位置,str所以匹配条件是真空的.