Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么char和string数据类型在C++;当相等于相同的文本值时?_C++_String_Char_Type Conversion - Fatal编程技术网

C++ 为什么char和string数据类型在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;

我有下面的C代码++

            #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)
vs
sizeof(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;
            }