为什么标准库使用 static_cast 到 unsigned char 来进行 char 相等性比较?

问题描述 投票:0回答:1

std::char_traits<>::eq()

参考文档
中进行字符类型相等比较,我阅读了以下内容:

  1. 比较
    a
    b
    是否相等,其行为与
  2. 相同
  • static_cast<unsigned char>(a) == static_cast<unsigned char>(b)
    ,如果 char_type 是 char,
  • a == b
    否则。

我想知道如果类型是

static_cast
,这些
unsigned char
char
背后的基本原理是什么?

我很难理解如果我们只想比较它们的相等性,为什么我们要关心

char
的符号(无论它是否是当前平台上的
signed
)。

c++ char comparison
1个回答
0
投票

同一参考页面,答案在“缺陷报告”部分给出(见下文)。


以下改变行为的缺陷报告追溯应用于之前发布的 C++ 标准。

博士 适用于 发布的行为 正确的行为
LWG 467 C++98 对于 std::char_traits,eq() 和 lt() 的语义分别与 char 上内置的
==
<
相同[1]
更改为内置
==
<
无符号字符

↑ 大多数实现都会调用 std::memcmp() 来提高效率,它将数据解释为无符号字符数组。如果 char 在此类实现上签名,则 std::char_traits 无法满足 CharTraits 的要求。

© www.soinside.com 2019 - 2024. All rights reserved.