C++ 字符串::比较多余的参数?

C++ 字符串::比较多余的参数?,c++,stl,C++,Stl,在中,存在以下过载: int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const; 它有两个参数n1和n2,在我看来,这两个参数应该始终相等,或者函数返回的int等于true(字符串::比较返回值0(false)表示字符串相等)。这是正确的吗?如果不是,您能否提供一个示例,说明如果比较长度不相等(n1!=n2),比较将为false)的具体情况 谢谢 在我看来,应该永远平等

在中,存在以下过载:

int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const;
它有两个参数
n1
n2
,在我看来,这两个参数应该始终相等,或者函数返回的
int
等于
true
(字符串::比较返回值0(false)表示字符串相等)。这是正确的吗?如果不是,您能否提供一个示例,说明如果比较长度不相等(
n1!=n2
),比较将为
false
)的具体情况

谢谢

在我看来,应该永远平等或平等 函数返回一个等于的整数 假的

比较是三值比较:负/零/正是返回值的重要类型,而不仅仅是真/假。如果字符串相等,则返回等于false的int,如果字符串不相等,则返回不等于false的int

如果您对不同长度的(子)字符串进行词汇排序,
compare
将告诉您它们的顺序

如果您关心的只是(子)字符串相等,那么不同的长度意味着不相等。作为优化,如果
n1!=n2

一份文件中说: “返回值:如果操作数字符串小于参数字符串,则返回负值;如果两个字符串相等,则返回零;如果操作数字符串大于参数字符串,则返回正值。”

所以这不是真的也不是假的。 e、 g

操作数:“abc”,参数:“ab”返回:-1


操作数:“abc”,参数:“ad”返回:+1

n1
n2
参数是要比较的最大字符数。如果值超过字符串的长度,则std::compare函数将修剪这些值。下面是一个值不相等且函数返回0的示例

std::string a("AACAB");
std::string b("CAB");
std::cout << a.compare(2, 8, b, 0, 12) << '\n';
std::字符串a(“AACAB”);
标准::字符串b(“CAB”);

std::cout Wait,一个
int
等于
false
?@icecrime:an
int
可以很容易地转换为
bool
,这就是你如何将
if
strcmp
等一起使用的方法。是的,但是像
strcmp
compare
不返回布尔值,而是一个整数(就像上面说的那样)。对于相等的字符串,
compare
返回一个整数值0,在布尔上下文中计算为
false
。@eq:好的,我的错误,但是字符串相等性可以通过
a.compare(b)来测试
尽管如此。@ruvenb:我刚刚从本周使用的一个代码中删去了这种用法,它肯定没有
a==b
那么清楚,因此我真的觉得
compare
在您真正关心订购时使用得更好。