繁体   English   中英

std :: string比较,lexicographical或不

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM