【发布时间】: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 即字符数据类型不正确等同于字符串数据类型,为什么会这样?
【问题讨论】:
-
您在第一种情况下比较两个指针。
-
因为在第一种情况下,
x和y在比较时会被解释为char*,从而有效地比较了它们的第一个元素的地址。如果你真的需要这个,请使用strcmp -
你的意思是
char的数组,而不是char。 -
请注意,当字符串相等时,一些编译器会优化存储,您最终可能会得到第一个测试为真(Visual C++ 曾经这样做)。您的代码可以正常工作,但不可移植。
-
@Jean-FrançoisFabre:他们可以为字符串文字做到这一点,但不能用于 char 数组。如果 VC++ 这样做,它不符合标准,因为它会说两个不同的对象具有相同的地址。
标签: c++ string char type-conversion