为什么const char []和const char *之间的比较不同?

时间:2019-06-22 03:50:28

标签: c++ c

假设我有以下代码:

const char str1[] = "asdasd";
const char str2[] = "asdasd";
const char* str3 = "dsadsa";
const char* str4 = "dsadsa";
if (str1 == str2)
{
    cout << "str1 == str2" << endl;
}
if (str3 == str4)
{
    cout << "str3 == str4" << endl;
}

结果是“ str3 == str4”。为什么?

2 个答案:

答案 0 :(得分:10)

对于C ++

str3str4指向相同的string literals

  

允许(但不是必需)编译器组合存储以相等或重叠的字符串文字。这意味着,当通过指针进行比较时,相同的字符串文字可能会比较相等,也可能不会相等。

这意味着str3 == str4true还是false未指定,这取决于实现,而您使用的是{{1 }}。

另一方面,truestr1是独立的数组。

  

字符串文字可用于初始化字符数组。如果像str2这样初始化数组,则char str[] = "foo";将包含字符串str的副本。

因此,保证"foo"str1 == str2

答案 1 :(得分:5)

字符串文字池。编译器倾向于合并相同的字符串文字,因此程序中只有一个副本。这是允许的,但不是必需的;依靠这种情况是不明智的。