C++ Primer第5版错误:bool值没有指定最小大小?

3

bool类型的最小尺寸不应该是1个字节吗?

Bool has no-specified min size


也许这是因为它只有技术上的1位?而且每个东西都有一个最小的大小为一个字节(1 * sizeof(char))。可能有一个注释在某个地方。 - Artyer
我到处查找,但什么都没有。我还发现了很多错别字...我在想这是否是一个好的参考(我只看到了第64页)! - mooder
1
“6个有效数字”不是一个大小,因此这张表格显示的内容并不是很清楚。 - M.M
这个回答解决了你的问题吗?布尔类型的最小尺寸是多少? - user10957435
1
那么,你得到了你的答案吗? - Asteroids With Wings
是的,谢谢你Asteroids With Wings,我需要再读一些内容才能完全理解你的答案。 - mooder
1个回答

6

这有点像学术研究。

虽然布尔值会转化为数字(而且,就像其他所有东西一样,它们最终将在计算机内存中由数字基本表示),但布尔值不是数字。你的bool可以取值truefalse。没有语义描述它占用了多少“字节”,即使你需要至少 1 位信息(在信息学意义上)来存储该数据。

与此相关的奇怪现象还有,C++标准为整数类型指定最小宽度,但不包括bool,因为它不是整数类型。同样,C限制宏也不包含bool(尽管这更可能是因为早期C不存在 bool)。该书显然直接使用了这些信息,连同浮点类型及其数学约束一起(请注意,这些约束也没有以 byte 宽度的形式给出)。

然而,标准确实承认bool “具有与实现定义的无符号整型相同的对象表示、值表示和对齐要求”ref),因为即使是标准也需要承认它存在于我们的物理现实中。然后,按照这个路线,我们甚至不需要遵循标准:我们知道你的bool将需要至少一个字节,因为每个对象都占用至少一个字节......除非你将其打包到vector<bool>或位域中。

如果我写那本书,我可能会至少留下这样的说明。


字符类型、bool、有符号和无符号整数类型及其cv限定版本,统称为整型。整型的同义词是整数类型。 - rosshjb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接