阅读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
在给定平台上有什么相同,在所有平台上保证一次访问一个八位字节的库或类型是有用的.
我绝对可以理解,希望能够明确指出某些东西被用作字节序列而不是字符序列,但它看起来并不像许多其他东西那样有用.
Dra*_*rax 13
鉴于这
std::byte
是为了处理"面向字节的内存访问",并且大多数人理解字节以指示八位字节(不是基础字符类型的大小),对于期望这将解决连续的8-的个人来说,这将如何工作?有点大块的记忆?
你无法理解错误,然后期望世界重新安排自己以适应你的期望.
大多数人认为字节和八位字节是相同的是因为在大多数情况下它是真的.绝大多数典型的计算机都有CHAR_BIT == 8
.这并不意味着它一直都是真的.
char
,signed char
并unsigned char
具有一个字节的大小.不过好的一面是,那些不知道的人实际上是不需要知道的人.如果您正在使用一个字节超过八位字节的机器上工作,那么您就是那种需要比任何其他人更了解的开发人员.
如果我们在这里谈论理论,那么答案很简单:只要知道一个字节不同于八位字节.如果我们正在谈论具体的东西,那么答案是你要么已经知道差异,要么你不需要知道它(希望:)).最糟糕的情况是你痛苦地学习这一点,但这是第三个少数族裔开发人员,他们在异国情调的平台上工作而没有异国情调的知识.
如果你想要八位字节的等价物,它已经存在:
请注意,它们"仅在实现直接支持该类型时提供".