字符串类中的相等测试运算符 < >我注意到C++中的许多字符串类没有实现与字符串比较的>==/Cux>运算符。这背后的原因是什么?就我所见,为字符串实现类应该使字符串本身成为一个实体,而不是指向一组字符的指针。因此,我们应该明确期望实现=操作符来比较两个实体(即字符串)的值

字符串类中的相等测试运算符 < >我注意到C++中的许多字符串类没有实现与字符串比较的>==/Cux>运算符。这背后的原因是什么?就我所见,为字符串实现类应该使字符串本身成为一个实体,而不是指向一组字符的指针。因此,我们应该明确期望实现=操作符来比较两个实体(即字符串)的值,c++,std,C++,Std,不为string类实现运算符==的一个原因是,如果您相信有更多的方法来比较字符串:区分大小写/不区分大小写,忽略重音,。。。您还提供了不同的比较函数,让用户指定 它仍然是一个选择,正如杰夫·福斯特已经评论的:它是在C++中唯一的实际字符串(STD::String)> P>中实现的。对于字符串类,不执行Tale==的原因是如果你相信有更多的方法来比较字符串:区分大小写/不敏感,忽略重音,…您还提供了不同的比较函数,让用户指定 仍然是一个选择,正如杰夫·福斯特已经说过的:它是在C++中唯一的实际字符

不为string类实现运算符==的一个原因是,如果您相信有更多的方法来比较字符串:区分大小写/不区分大小写,忽略重音,。。。您还提供了不同的比较函数,让用户指定


它仍然是一个选择,正如杰夫·福斯特已经评论的:它是在C++中唯一的实际字符串(STD::String)

> P>中实现的。对于字符串类,不执行Tale==的原因是如果你相信有更多的方法来比较字符串:区分大小写/不敏感,忽略重音,…您还提供了不同的比较函数,让用户指定


仍然是一个选择,正如杰夫·福斯特已经说过的:它是在C++中唯一的实际字符串(STD::string)

STD::String是Basic String:它有操作符==,它使用CARUR特性的比较方法。


您甚至可以加入自己的specialist traits类来进行不区分大小写的比较。

std::string是基本字符串,它有运算符==,它使用char\u traits的比较方法


您甚至可以加入自己的specialist traits类来进行不区分大小写的比较。

通常,当一个类没有实现
操作符==
时,这是因为类之外有一个自由函数。自由函数
operator==
的优点在于它支持两边的隐式转换。这对于字符串尤其重要,因为您经常使用
constchar[]
literals并希望进行隐式转换。例如

MyString S("Hello");
if ("hello" == S) { // Can't use MyString::operator== here
  std::cout << S;
}
mystrings(“你好”);
if(“hello”==S){//不能在这里使用MyString::operator==

std::cout通常,当一个类没有实现
操作符==
时,这是因为类外有一个自由函数。自由函数
操作符==
的优点是它在两侧都支持隐式转换。这对字符串尤其重要,因为在那里经常使用
常量字符[]
literals并希望进行隐式转换

MyString S("Hello");
if ("hello" == S) { // Can't use MyString::operator== here
  std::cout << S;
}
mystrings(“你好”);
if(“hello”==S){//不能在这里使用MyString::operator==

你能举一个没有的例子吗?例如std::string有。嗯……你确定std::string吗?我刚刚检查了std::string的实现(MSVC实现)它不包含任何
==
的实现。我认为不实现它的主要原因是避免覆盖
==
的默认行为,这应该是比较非常低级别的值,而不是它们所代表的内容(即指针与内容)。请参见.std::string绝对,绝对实现==。
std::string
的比较运算符在这里。您能给出一个没有的示例吗?例如,std::string有。嗯……您确定std::string吗?!我刚刚检查了std::string的实现(MSVC实现)它不包含任何
==
的实现。我认为不实现它的主要原因是避免覆盖
==
的默认行为,这应该是比较非常低级别的值,而不是它们所代表的内容(即指针与内容)。请参见.std::string绝对地,绝对地实现==。
std::string
的比较运算符在这里,这就是为什么它会委托traits类来进行比较。通过使用这样比较的traits类,您可以获得不区分大小写的比较。@CashCow:有相关链接吗?无论如何,我在impleme时显示了一个设计选择还有一个字符串。这里是堆栈溢出,这就是它委托traits类进行比较的原因。通过使用这样比较的traits类,您可以获得不区分大小写的比较。@现金牛:有相关链接吗?无论如何,我在实现另一个字符串时显示了一个设计选择。这里是堆栈溢出,我相信这就是原因谢谢!我相信这是最好的答案。谢谢!