int main()
{
string s1("z");
string s2("ab");
if(s1 > s2) cout << s1 << " is greater than " << s2 << endl;
cout << ("z" > "ab") << endl;
return 0;
}
输出为
z is greater than ab
0
我有点困惑,因为在第三条语句s1中> s2进行了字典比较,并且期望得到结果,但是语句4返回0值。
谢谢,这让我发疯了
更新------
#include<iostream>
using namespace std;
int main()
{
string s1("z");
string s2("ab");
cout << &s1 << " " << &s2 << endl;
if(s1 > s2) cout << s1 << " is greater than " << s2 << endl;
cout << ("z" > "ab") << endl;
cout << ("ab" > "z") << endl;
cout << &("ab") << " " << &("z") << endl;
return 0;
}
上面的代码帮助了我。
答案 0 :(得分:3)
行
cout << ("z" > "ab") << endl;
等同于
char const* s1 = "z";
char const* s2 = "ab";
cout << (s1 > s2) << endl;
该表达式仅比较两个指针。不能保证结果为true
。也不能保证是false
。结果取决于编译器在何处为字符串文字分配内存。
答案 1 :(得分:0)
"z" > "ab"
比较C字符串文字,因此它比较指针而不是内容。
从理论上讲,哪个BTW的定义不明确(std::less
是)。
答案 2 :(得分:0)
问题在于,您使用的“字符串”文字不是真正的字符串:它们会退化为指向char
的指针。那就是可怕的C语言遗产。 uck
如果要比较字符串,则必须明确说明它:
assert(string_view("z") > string_view("ab"has ));
Prefer也声明调试输出。它们使您清楚观察到的内容,而无需提供任何输出,也无需使用英语散文来描述您所得到的。然后,您的问题可以最小化为“为什么4中的断言成立?”。