为什么要这段代码
if ("j" > "J")
返回false,而不是这个:
string a = "j";
string b = "J";
if (a > b)
返回true?这是正确的答案,我该如何修复它?
if ("j" > "J")
返回false,而不是这个:
string a = "j";
string b = "J";
if (a > b)
返回true?这是正确的答案,我该如何修复它?
"j"
和 "J"
是字符串字面值,它们被作为 const char
指针进行比较。因此,比较的结果是任意的,因为字面值在内存中的位置是由实现定义的。std::string
对象时,<
运算符(以及其他比较运算符)被路由到由 std::string
类提供的重载上。这个重载执行字符串的词典排序比较,而不是比较指针值,因此比较的结果看起来是正确的。<
比较中衰减为const char指针。 - Tony Delroyif ('j' > 'J')
这是因为"j"和"J"都是const char[]类型。例如,"j"是一个字符数组,c[0]='j',c[1]='\0'。在C和C++中,你不能直接比较两个数组。更好的做法是使用
strcmp("j","J");
巫婆在这里
当你输入时
string a="j"
您在类字符串中运行构造函数。但是在类字符串中,您已经重载了运算符<来比较两个字符串。
你可以尝试一下
if ("J" < "j")
可能会得到不同的结果。
实际上,“J”和“j”是常量C字符串,可以放置在.data或.text部分中,这取决于输出二进制文件格式。因此,当您比较它们时,您正在比较它们在内存中的地址。
但是std::string是一个C++类,重载了>运算符,因此它不是地址/指针比较,而是内容比较。
"j"
和"J"
是指针,因此您正在比较它们的地址。 - David G