readability-string-compare¶
查找使用 compare 方法进行字符串比较的情况。
一个常见的错误是使用字符串的 compare
方法而不是使用相等或不等运算符。compare 方法旨在用于排序函数,因此它返回一个负数、正数或零,具体取决于比较的字符串的字典顺序关系。如果可以使用相等或不等检查,建议使用该方法。建议这样做是为了避免对返回值进行错误解释的风险,并简化代码。由于可以提前终止,字符串相等和不等运算符可能比 compare
方法更快。
示例¶
// The same rules apply to std::string_view.
std::string str1{"a"};
std::string str2{"b"};
// use str1 != str2 instead.
if (str1.compare(str2)) {
}
// use str1 == str2 instead.
if (!str1.compare(str2)) {
}
// use str1 == str2 instead.
if (str1.compare(str2) == 0) {
}
// use str1 != str2 instead.
if (str1.compare(str2) != 0) {
}
// use str1 == str2 instead.
if (0 == str1.compare(str2)) {
}
// use str1 != str2 instead.
if (0 != str1.compare(str2)) {
}
// Use str1 == "foo" instead.
if (str1.compare("foo") == 0) {
}
上面的代码示例显示了此检查将发出警告的 if 语句列表。它们都使用 compare
来检查两个字符串的相等或不等,而不是使用正确的运算符。
选项¶
- StringLikeClasses¶
包含以分号分隔的字符串类名称的字符串。默认情况下仅包含
::std::basic_string
和::std::basic_string_view
。如果此列表中的类具有与std::string
类似的compare
方法,则将以相同的方式进行检查。
示例¶
struct CustomString {
public:
int compare (const CustomString& other) const;
}
CustomString str1;
CustomString str2;
// use str1 != str2 instead.
if (str1.compare(str2)) {
}
如果 StringLikeClasses 包含 CustomString
,则该检查将建议使用相等运算符替换 compare
。