std:string和c-string的比较

comparison between std:string and c-string

本文关键字:比较 c-string string std      更新时间:2023-10-16

我正在尝试验证一个类似问题的答案。我遇到了一个问题,因为下面的代码显示,std::string的内容实际上是与char[]的属性进行比较的,而不是指针正如这些答案所暗示的那样。

这是C++11的一个新特性吗?非常感谢您的帮助。

std::string smth = "hello";
char ch[8] = "hello";
if (ch == smth)
    cout << "yes!";
else
    cout << " no ";
ch[2] = 'W';
if (ch == smth)
    cout << "yes!";
else
    cout << " no ";
ch[2] = 'l';
if (ch == smth)
    cout << "yes!";
else
    cout << " no ";

输出为:是!不,是的,而指针绝对不会改变。。

std::string有一个带有char*指针的operator==

因此,每次执行以下行时:

if (ch == smth)

您不仅可以比较指针,还可以调用类似于strcmp的函数,该函数将比较字符串和指针的数据,如果它们相似,则返回true。

所以不,指针肯定不会改变,但它们的数据会改变。运算符的结果也是如此。

在每一个版本的C++标准中都指定了比较std::stringconst char *的能力,其结果是比较字符集。具体地,operator==()和涉及std::string作为至少一个操作数的其他比较运算符是标准的一部分。

它不是任何C版本的特性,因为std::string不是C标准库的一部分。所以它不是C11的一个特性。

您链接的问题是比较两个类型为char*的值。这里的区别在于char*是指针,而string()不是指针。当您比较指针时,它会检查指针是否相等,但由于string()不是指针,它会转到其operator==,后者会检查字符串内容本身是否相等。