【发布时间】:2017-09-22 17:01:54
【问题描述】:
阅读 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 等于什么。
我完全可以理解想要明确说明某些东西被用作字节序列而不是字符序列,但它似乎不像许多其他东西那样有用。
【问题讨论】:
-
就标准而言,一个字节具有
CHAR_BIT位。这就是为什么sizeof(char)始终为 1,即使在那些 DSP 上也是如此。 -
这些人需要调整他们的期望。或者,更坦率地说,别再犯错了。
-
如果您担心某些人可能会错误地使用它,那么 C++ 中的所有内容都是如此。您有更具体的问题吗?
-
@NathanOliver,这是否意味着一个
std::byte具有CHAR_BIT位而sizeof (std::byte)始终为1? -
en.cppreference.com/w/cpp/types/byte,它基本上 is 无符号字符,sizeof 将为 1。它只是有不同的类型,所以你不能不小心将它用作字符串或整数类型,是我第一眼的印象。