我正在尝试验证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 ";
输出是:是的!不,是的!,虽然指针肯定不会改变..
答案 0 :(得分:2)
/home/me/test.sh
确实有operator==
with char*
pointers。
所以每次执行该行:
std::string
你不只是比较指针,而是调用类似于strcmp的函数来比较字符串和指针的数据,如果它们相似则返回true。
所以不,指针肯定不会改变,但他们的数据确实如此。那么运营商的结果也是如此。
答案 1 :(得分:1)
在每个版本的C ++标准中都指定了将std::string
与const char *
进行比较的能力,以及比较字符集的结果。具体而言,operator==()
和其他涉及std::string
作为至少一个操作数的比较运算符是标准的一部分。
它不是任何C版本的功能,因为std::string
不是C标准库的一部分。所以这不是C11的特色。
答案 2 :(得分:0)
您关联的问题是比较char*
类型的两个值。这里的区别是char*
是指针,但string()
不是指针。比较指针时,它会检查指针是否相等,但由于string()
不是指针,它会转到operator==
,检查字符串内容本身是否相等。