C++17 中 std::byte 只能按位运算?

wim*_*aan 15 c++ byte language-lawyer std-byte

CPP 参考文献中指出:

std::byte是一种独特的类型,它实现了 C++ 语言定义中指定的字节概念。

与 char 和 unsigned char 一样,它可用于访问其他对象(对象表示)占用的原始内存,但与这些类型不同的是,它不是字符类型,也不是算术类型。字节只是位的集合,并且只为其定义了按位运算符

但这不是真的:因为它是枚举类型,所以比较操作(<, <=, >, >=, ==, !=)也是可能的。

这是故意的吗,例如std::byte也用作 等的密钥std::map

Jan*_*tke 19

std::byte是的,比较运算符是有意为之的。该提案是std::byte这样说的:

类似地,std::byte可以进行比较,因为比较和排序实例是明智且有用的操作。给定其基础存储类型,比较运算符将给出与在基础类型上执行相同的结果。

- P0298r3 字节类型定义

正如您所指出的,这允许用作std::byte容器中的键。它还允许在需要相等或小于比较的情况下使用、、等std::byte算法。std::partitionstd::sortstd::unique

请注意, C++ 标准中的通用定义库部分并没有过多介绍std::byte. 这并不是说它不具有可比性。

请记住,cppreference 不是规范性的,任何人都可以编辑*而无需开设帐户。有许多部分不完整,维基百科中经常出现错误。最有可能的是,作者忘记了std::byte还有比较运算符。


*事实上,我刚刚自己编辑了该页面,现在显示:

字节只是位的集合,并且只为其定义了按位运算符和比较运算符。