提问人:Fareanor 提问时间:10/25/2023 更新时间:10/25/2023 访问量:52
为什么标准库使用 static_cast to unsigned char 进行 char 相等性比较?
Why do the standard library use static_cast to unsigned char for char equality comparison?
问:
从字符类型相等比较的参考文档中,我阅读了以下内容:std::char_traits<>::eq()
- 比较 和 为了相等,行为与
a
b
static_cast<unsigned char>(a) == static_cast<unsigned char>(b)
,如果 char_type 是 char,a == b
否则。
我想知道如果类型是?static_cast
unsigned char
char
我很难理解,如果我们只想比较它们的平等性,为什么我们要关心它们的标志性(无论它是否在当前平台上)。char
signed
答:
1赞
Fareanor
10/25/2023
#1
在同一参考页面中,答案在“缺陷报告”部分给出(见下文)。
以下行为更改缺陷报告追溯应用于以前发布的 C++ 标准。
博士 | 适用于 | 发布的行为 | 正确的行为 |
---|---|---|---|
LWG 467型 | C++98 | 对于 std::char_traits<char>,eq() 和 lt() 的语义分别与内置和 on char 相同[1]== < |
更改为内置和无符号字符== < |
↑ 大多数实现调用 std::memcmp() 以提高效率,它将数据解释为无符号字符数组。如果在此类实现上对 char 进行了签名,则 std::char_traits<char> 无法满足 CharTraits 的要求。
评论