【问题标题】:Why do char and string data types show different results in C++ when equating the same text value?为什么 char 和 string 数据类型在等同于相同文本值时在 C++ 中显示不同的结果?
【发布时间】:2026-02-06 03:15:02
【问题描述】:

我在 C++ 中有以下代码

            #include <iostream>
            using namespace std;
            int main()
            {
            char x[]="hello world";
            char y[]="hello world";
            cout << (x==y) << endl;
            return 0;
            }

这将返回值 0,即不正确 但是,如果我现在使用字符串数据类型重复相同的值,那么

            #include <iostream>
            using namespace std;
            int main()
            {
            string x="hello world";
            string y="hello world";
            cout << (x==y) << endl;
            return 0;
            }

这将返回值 1,即正确的 true 即字符数据类型不正确等同于字符串数据类型,为什么会这样?

【问题讨论】:

  • 您在第一种情况下比较两个指针。
  • 因为在第一种情况下,xy 在比较时会被解释为char*,从而有效地比较了它们的第一个元素的地址。如果你真的需要这个,请使用strcmp
  • 你的意思是char的数组,而不是char
  • 请注意,当字符串相等时,一些编译器会优化存储,您最终可能会得到第一个测试为真(Visual C++ 曾经这样做)。您的代码可以正常工作,但不可移植。
  • @Jean-FrançoisFabre:他们可以为字符串文字做到这一点,但不能用于 char 数组。如果 VC++ 这样做,它不符合标准,因为它会说两个不同的对象具有相同的地址。

标签: c++ string char type-conversion


【解决方案1】:

这是因为在第一种情况下,您只是比较指针 xy,即两个数组的基地址。使用strcmp 比较两个字符数组。

在第二种情况下,string 数据类型重载了== 运算符并实际比较了两个字符串的内容。

编辑: ==重载信息http://www.cplusplus.com/reference/string/string/operators/

【讨论】:

  • 但是xy 是数组,而不是指针。所以这里缺少一些东西......
  • 是的,但是在 C/C++ 中,数组本质上是指向存储数组元素的连续内存空间的基地址的指针。
  • 不,这不是一个很好的心智模型!这会导致各种混乱。
  • @juanchopanza 也许你也可以为我和 OP 澄清一下,正确的思考方式是什么。
  • 数组可以衰减为指向表达式中第一个元素的指针,例如二进制x==y,但它们没有指针类型(参见例如sizeof(x) vs sizeof(char*),或尝试char* z = &amp;x; .) 所以你是对的,正在比较两个指针,缺少的部分就是原因。
最近更新 更多