在阅读一本C ++书时,我遇到了一个使用>比较两个字符串的示例。我试用了该代码,发现这两个语句对同一事物的求值不同。有人可以解释在C ++中对字符串使用<或>时发生了什么吗?
string s = "fool";
cout << ("fool" < "ape"); // returns true (1)
cout << (s < "ape"); //returns false (0)
答案 0 :(得分:8)
"fool"
和"ape"
是字符串文字,它们的类型是内置类型(实际上是const char
的数组),因此您得到了{{1 }}。具体来说,您将得到数组到指针的衰减,然后进行指针比较。
禁止在不同数组中的项目之间进行指针比较,因此比较结果不确定(甚至可能无法重复)。
另一个比较operator<
非常不同。其中一个操作数具有类类型,因此使用s < "ape"
提供的重载运算符。该重载实际上知道字符串比较。
答案 1 :(得分:2)
cout << (s < "ape"); //returns false (0)
这意味着您已经(明示或暗示地)转换了string
,然后就可以安全地进行比较了。
cout << ("fool" < "ape"); // returns true (1)
这意味着您正在比较两个指针,因为它们是字符串文字。请在C++ Comparison of String Literals上查看有关此内容的更多信息。
答案 2 :(得分:1)
cout <<(“傻瓜” <“猿”); //返回true(1)
它比较指针地址,但不确定哪个更大。如果您编写另一个程序,则结果可能为假(0)。此类代码应该从不出现在您的程序中。 (感谢Ben Voigt,请参阅他的回答)
cout <<(s <“ ape”); //返回假(0)
它使用C ++的<
重载运算符,逐字节比较字符串。