C++中std::string的compare方法与==运算符结果差异疑问
运行结果差异原因分析
你遇到的结果差异和str2的创建方式完全无关,本质是对std::string::compare方法的返回值规则理解错误导致的:
1. std::string::compare的返回值规则
该方法返回的是int类型值,不是布尔值,规则如下:
- 两个字符串内容完全相等时,返回
0 - 调用方字符串字典序小于入参字符串时,返回负整数
- 调用方字符串字典序大于入参字符串时,返回正整数
2. 结果异常的直接原因
你在代码中直接将compare的返回值赋值给bool类型变量:
bool equalCompare = str1.compare(str2);
C++中整数转布尔值的规则为:0转为false,所有非0值转为true。两个字符串相等时compare返回0,最终equalCompare会被赋值为false,刚好和“相等则为真”的预期相反。
而==运算符对std::string重载的逻辑本身就是返回布尔值,相等时返回true,不等时返回false,完全符合常规预期,因此两者运行结果看起来不一致。
3. 正确写法
如果要使用compare方法判断字符串相等,需要显式判断返回值是否为0:
bool equalCompare = (str1.compare(str2) == 0);
修改后得到的结果和==运算符的判断结果完全一致。
另外你使用的单char转std::string的写法std::string str2(1, tmpChar)是标准合规的实现方式,不存在任何问题。
内容的提问来源于stack exchange,提问作者Wirlous
相关产品推荐
相关产品推荐

