std:string和c-string之间的比较

时间:2016-03-28 00:59:39

标签: c++ string

我正在尝试验证similar question上给出的答案。我遇到了麻烦,因为下面的代码显示有效地将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 ";

输出是:是的!不,是的!,虽然指针肯定不会改变..

3 个答案:

答案 0 :(得分:2)

/home/me/test.sh 确实有operator== with char* pointers

所以每次执行该行:

std::string

你不只是比较指针,而是调用类似于strcmp的函数来比较字符串和指针的数据,如果它们相似则返回true。

所以不,指针肯定不会改变,但他们的数据确实如此。那么运营商的结果也是如此。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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