标准::字节在奇数平台上

std::byte on odd platforms

本文关键字:平台 字节 标准      更新时间:2023-10-16

阅读Herb Sutter关于最近C++标准会议的博客文章,它注意到std::byte被添加到C++17中。 作为初步阅读,我有一些担忧,因为它使用unsigned char,以避免严格的混叠规则的复杂性。

我最担心的是,它在CHAR_BIT不是 8 的平台上如何工作? 我曾在CHAR_BIT为 16 或 32 的平台(通常是 DSP)上工作过。 鉴于std::byte用于处理"面向字节的内存访问",并且大多数人将字节理解为表示八位字节(而不是基础字符类型的大小),对于希望这将解决连续 8 位内存块的个人来说,这将如何工作?

我已经看到有人只是假设CHAR_BIT是 8(不是晚上知道CHAR_BIT存在...... 一种叫做std::byte的类型可能会给个人带来更多的困惑。


猜我所期望的是他们正在引入一种类型,以允许在所有情况下一致地寻址/访问顺序八位字节。 有许多面向八位字节的协议,其中有一个库或类型保证在所有平台上一次访问一个八位字节的内存会很有用,无论给定平台上的CHAR_BIT等于什么。

我绝对可以理解想要很好地指定某些东西被用作字节序列而不是字符序列,但它似乎不像许多其他东西那样有用。

鉴于std::byte用于处理"面向字节的内存访问",并且大多数人将字节理解为表示八位字节(而不是底层字符类型的大小),这将如何适用于希望这将解决连续 8 位内存块的个人?

你不能理解错误的东西,然后期望世界重新安排自己以满足你的期望。

大多数人之所以认为字节和八位字节是一回事,是因为在大多数情况下它是真的。绝大多数典型计算机都有CHAR_BIT == 8.这并不意味着它一直都是正确的。

字节
  • 不是八位字节。
  • charsigned charunsigned char的大小为一个字节

好的一面是,不知道这一点的人实际上是不需要知道的人。如果你在一台字节超过一个八位字节的机器上工作,你是那种比其他任何八位字节更需要了解这一点的开发人员。

如果我们在这里谈论理论,那么答案很简单:只要知道字节与八位字节不同。如果我们谈论的是具体的东西,那么答案是你要么已经知道区别,要么你不需要知道它(希望:))。最糟糕的情况是你痛苦地学习这一点,但这是第三组在没有异国情调知识的情况下在异国情调平台上工作的开发人员。


如果你想要一个八位字节的等效项,它已经存在:

  • int8_t
  • uint8_t

请注意,它们"仅在实现直接支持类型时才提供"。