c – 奇数平台上的std :: byte

前端之家收集整理的这篇文章主要介绍了c – 奇数平台上的std :: byte前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
阅读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等于什么,在所有平台上保证一次访问一个八位字节的库或类型是有用的.

我绝对可以理解,希望能够明确指出某些东西被用作字节序列而不是字符序列,但它看起来并不像许多其他东西那样有用.

解决方法

Given that std::byte is for dealing with “byte-oriented access to memory”,and most people understand byte to indicate an octet (not the size of the underlying character type),how will this work for individuals who expect that this will address contiguous 8-bit chunks of memory?

你无法理解错误,然后期望世界重新安排自己以适应你的期望.

大多数人认为字节和八位字节是相同的是因为在大多数情况下它是真的.绝大多数典型的计算机都有CHAR_BIT == 8.这并不意味着它一直都是真的.

>一个字节不是八位字节.
> char,signed char和unsigned char的大小为一个字节.

不过好的一面是,那些不知道的人实际上是不需要知道的人.如果你正在使用一个字节超过八位字节的机器上工作,那么你就是那种比任何其他人都更需要知道的开发人员.

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

如果你想要八位字节的等价物,它已经存在:

> int8_t
> uint8_t

请注意,它们“仅在实现直接支持该类型时提供”.

原文链接:https://www.f2er.com/c/115859.html

猜你在找的C&C++相关文章