我注意到C ++中的许多字符串类没有实现==
运算符来与字符串进行比较。这背后的原因是什么?据我所知,为字符串实现一个类应该使字符串本身成为一个实体,而不是指向一组字符的指针。所以我们绝对应该期望实现==
运算符来比较两个实体(即字符串)的值!
答案 0 :(得分:2)
std :: string是basic_string,它有operator ==,它使用char_traits的compare方法。
您甚至可以将自己的专业特征类放入不区分大小写的比较中。
答案 1 :(得分:2)
通常,当一个类没有实现operator==
时,这是因为在类之外有一个自由函数。自由函数operator==
的优点是它支持双方的隐式转换。这对于字符串尤为重要,因为您经常使用const char[]
文字并希望进行隐式转换。 E.g。
MyString S("Hello");
if ("hello" == S) { // Can't use MyString::operator== here
std::cout << S;
}
答案 2 :(得分:1)
没有为字符串类实现operator ==的原因是,如果您认为有更多方法来比较字符串:区分大小写/不敏感,忽略重音,...并且您提供不同的比较函数以让用户指定。
它仍然是一个选择,正如Jeff Foster已经评论过的那样:它是用C ++中唯一真正的字符串实现的(std :: string)