c++string::compare()fn的意外行为

string::compare() 的重载形式之一为

int compare (size_t pos, size_t len, const string& str) const;

现在考虑以下两种情况:

场景一:

string s1="steven", s2="steve";
cout<<s1.compare(0, 5,s2);

场景2:

string s1="steven", s2="stevec";
cout<<s1.compare(0, 5,s2);

第一种情况下的 O/P 为 0(预期),但在第二种情况下产生 -1(意外)。fn 调用转换为将 s1 的前 5 个字符与 s2 的那些字符进行比较。那么,输出如何受到s2的第 6 个字符的影响。有人可以解释一下标准库 fn 的这种实现背后的原因吗?

回答

如cppreference 中所述:

  1. 将此字符串的 [pos1, pos1+count1) 子字符串与 str 进行比较。如果count1 > size() - pos1子串是 [pos1, size())。

没有说第二个字符串的大小。这意味着比较整个 string2。所以一切都在预料之中。


以上是c++string::compare()fn的意外行为的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>