首先,考虑这个例子:
#include <iostream>
using namespace std;
int main()
{
cout << ("123" == "123");
}
我期望什么:由于 "123" 是 a const char*
,我希望这些字符串的 ADDRESSES (就像其中一个答案所说的那样)进行比较。
...因为
!=
并且==
只会比较这些字符串的基地址。不是字符串本身的内容。
但输出仍然是1
. 好吧,我们实际上不知道如何比较两个纯右值对象的地址(或者至少我不明白它是如何完成的)。所以让我们将这些字符串声明为变量,看看会发生什么:
#include <iostream>
using namespace std;
int main()
{
const char* a = "1230";
const char* b = "1230";
cout << (a == b);
}
输出仍然是1
. 所以const char*
弦不会衰减?或者编译器设法进行一些优化并只为一个字符串分配内存?好的,让我们尽量避免它们:
#include <iostream>
using namespace std;
int main()
{
const char* a = "1230";
const char* b = "1231";
b = "1230";
cout << (a == b);
}
结果还是一样。这让我觉得const char*
真的不会腐烂。但这并没有让我的生活变得更简单。那么const char*
s 是如何比较的呢?
为什么这里的输出是1
:
#include <iostream>
using namespace std;
int main()
{
const char* a = "1230";
const char* b = "1231";
cout << (a > b);
}
a
小于b
,就字典比较而言,但这里a
更大。那么如何const char*
实现 s 的比较呢?