C++ string::compare()函数的意外行为

3

string::compare()有一种重载形式,如下所示:

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

现在考虑以下两种情况:

情况1:

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

场景2:

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

第一种情况的输出为0(预期),但第二种情况的输出为-1(意外)。函数调用转换为比较s1的前5个字符和s2的前5个字符。那么,为什么s2的第6个字符会影响输出。有人可以解释一下标准库函数这样实现的原因吗?
1个回答

5
cppreference所述:

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

没有提到第二个字符串的大小。这意味着将比较整个string2。所以一切都如预期那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接