【问题标题】:C++ Primer 5th edition error bool value no specified minimal size?C++ Primer 第 5 版错误 bool 值未指定最小大小?
【发布时间】:2020-01-28 00:36:07
【问题描述】:

bool 的最小大小不应该是 1 个字节吗?

【问题讨论】:

  • 也许是因为它在技术上只有 1 位?并且所有内容的最小大小为一个字节 (1 * sizeof(char))。可能某处有注释
  • 我到处查了,什么也没查。我还发现了很多错别字......我想知道这是否是一个很好的参考(我只是在第 64 页)!
  • “6 个有效数字”不是一个大小,所以不清楚这张表显示的是什么
  • 这能回答你的问题吗? What is the minimum size of a boolean?
  • 那么,你得到答案了吗?

标签: c++


【解决方案1】:

这有点学术性的东西。

尽管它们会转换为数字(尽管与其他所有事物一样,它们最终将由计算机内存中的数字表示),但布尔值不是数字。您的bool 可以取值true,或取值false。没有关于需要多少“字节”的语义描述,即使您确实需要至少 1 位信息(在信息学意义上)来存储该数据。

还有与 the C++ standard gives minimum widths for the integer types 相关的奇怪之处,因为它不是整数类型,所以将 bool 排除在外。同样,the C limits macros don't include one for bool(尽管这可能更多是因为bools 在早期的 C 中并不存在)。这本书显然或多或少地直接使用了这些信息,添加了浮点类型及其数学约束(请注意,这些也不是以字节宽度为单位给出的)。

然而,标准确实继续承认bool “与实现定义的无符号整数类型具有相同的对象表示、值表示和对齐要求” (ref ),因为即使是标准也需要承认它存在于我们的物理现实中。沿着这条路走,我们甚至不需要标准:我们知道你的bool 至少需要一个字节,因为每个对象至少占用一个字节......除非你把它打包成一个vector<bool> 或位域。

如果我正在写那本书,我可能至少会为此留下一张便条。

【讨论】:

  • 字符类型 bool、有符号和无符号整数类型以及它们的 cv 限定版本统称为整数类型。整数类型的同义词是整数类型。
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 2022-01-25
  • 2015-05-25
  • 2016-11-12
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多