阅读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
在给定平台上是什么var cuentas = (from mov in _data.Movimientos.Where(w => w.IsDeleted == 0).GroupBy(g => g.CuentasId)
join ct in _data.Cuentas.Where(w => w.IsDeleted == 0).GroupBy(g => new { CuentasId = g.CuentasId, Alias = g.Alias, Monedas = g.Monedas.Nombre, Signo = g.Monedas.Signo, Banco = g.Bancos.Nombre })
on mov.Key.CuentasId equals ct.Key.CuentasId
select new
{
Alias = ct.Key.Alias,
Moneda = ct.Key.Moneda,
Signo = ct.Key.Signo,
Banco = ct.Key.Banco,
Monto = mov.Sum(s => s.Monto)
}
).ToList();
,都可以保证在所有平台上一次访问一个八位字节的库或类型。 / p>
我绝对可以理解,希望能够明确指出某些东西被用作字节序列而不是字符序列,但它看起来并不像许多其他东西那样有用。
答案 0 :(得分:13)
鉴于
std::byte
用于处理“面向字节的内存访问”,并且大多数人理解字节以指示八位字节(不是基础字符类型的大小),这对于那些对于期望这将解决连续的8位内存块?
你无法理解错误,然后期望世界重新安排自己以适应你的期望。
大多数人认为字节和八位字节是相同的是因为在大多数情况下它是真的。绝大多数典型计算机都有CHAR_BIT == 8
。这并不意味着它一直都是真的。
char
,signed char
和unsigned char
的大小为字节。但好的一面是,那些不知道的人实际上是不需要知道的人。如果您正在使用一个字节超过八位字节的机器上工作,那么您就是那种需要比任何其他人更了解的开发人员。
如果我们在这里谈论理论,那么答案很简单:只要知道一个字节与一个八位字节不同。如果我们正在谈论具体的东西,那么答案是你要么已经知道差异,要么你不需要知道它(希望:))。最糟糕的情况是你痛苦地学习这一点,但这是在没有异国情调的情况下在异域平台上工作的第三个开发人员群体。
如果你想要八位字节的等价物,它已经存在:
请注意,它们“仅在实现直接支持类型”时提供。