字符串类中的等式测试操作符

时间:2011-01-28 09:59:54

标签: c++ std

我注意到C ++中的许多字符串类没有实现==运算符来与字符串进行比较。这背后的原因是什么?据我所知,为字符串实现一个类应该使字符串本身成为一个实体,而不是指向一组字符的指针。所以我们绝对应该期望实现==运算符来比较两个实体(即字符串)的值!

3 个答案:

答案 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)