[英]std::string comparison, lexicographical or not
以下代码来自C ++ quirks文章,198276部分
include <iostream>
#include <string>
using namespace std;
int main()
{
std::string a = "\x7f";
std::string b = "\x80";
cout << (a < b) << endl;
cout << (a[0] < b[0]) << endl;
return 0;
}
令人惊讶的是输出是
1
0
字符串比较不应该是词典吗? 如果是,输出如何解释?
C ++规范中没有任何内容可以说char
是有signed
还是unsigned
,这取决于编译器。 对于您的编译器,似乎char
默认为signed char
,这就是为什么第二个比较返回false
。
所以我只想直接引用您的链接 :
事实证明,标准需要这种行为,在第21.2.3.1节[char.traits.specializations.char]中:“两个参数成员eq和lt应该与内置运算符==和<相同地定义对于unsigned char类型。“
所以:
(a < b)
需要使用unsigned char
比较。 (a[0] < b[0])
需要使用char
比较,可以签名也可以不签名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.