C++ 为什么char和string数据类型在C++;当相等于相同的文本值时?
我有下面的C代码++C++ 为什么char和string数据类型在C++;当相等于相同的文本值时?,c++,string,char,type-conversion,C++,String,Char,Type Conversion,我有下面的C代码++ #include <iostream> using namespace std; int main() { char x[]="hello world"; char y[]="hello world"; cout << (x==y) << endl;
#include <iostream>
using namespace std;
int main()
{
char x[]="hello world";
char y[]="hello world";
cout << (x==y) << endl;
return 0;
}
#包括
使用名称空间std;
int main()
{
char x[]=“你好,世界”;
char y[]=“你好,世界”;
cout这是因为在第一种情况下,您只是比较指针x
和y
,即两个数组的基址。用于比较两个字符数组
在第二种情况下,字符串
数据类型重载=
运算符,并实际比较两个字符串的内容
编辑:
关于=
重载的信息在第一种情况下,您正在比较两个指针。因为在第一种情况下,x
和y
在比较时被解释为char*
,有效地比较了它们的第一个元素的地址。如果确实需要,请使用char
数组,而不是char注意,一些编译器在字符串相等时优化存储,最终可以用第一个测试为真(VisualC++用来做)。。您的代码可以正常工作,但不可移植。@Jean-Françoisfab:他们可以对字符串文本执行此操作,但不能对字符数组执行此操作。如果VC++执行此操作,则不符合标准,因为它会说两个不同的对象具有相同的地址。但是x
和y
是数组,而不是指针。因此,有一些地方遗漏了在这里输入…是的,但在C/C++中,数组本质上是指向存储数组元素的连续内存空间的基址的指针。不,这不是一个很好的心智模型!这会导致各种各样的混乱。@juanchopanza也许你也可以为我和OP澄清一下,正确的想法是什么。数组可以衰减为指向其表达式中第一个元素的指针,例如二进制x==y
,但它们没有指针类型(例如,请参见sizeof(x)
vssizeof(char*)
,或者尝试char*z=&x;
),因此比较两个指针是正确的,缺少的部分就是原因。
#include <iostream>
using namespace std;
int main()
{
string x="hello world";
string y="hello world";
cout << (x==y) << endl;
return 0;
}