int,char,float和bool,哪个最小?

Ben*_*Ben 27 c++ types

以下内容来自"在家填写"编程测试,该测试是英国大学游戏开发理学硕士申请流程的一部分:

C++基础知识

如果程序声明了四个变量,一个是类型int,一个是类型 float,一个是类型char,还是一个类型bool,哪个变量占用内存中的空间最小

  1. INT
  2. 烧焦
  3. 浮动
  4. 布尔

根据指示,只有一个真实的陈述.但是,我的C++书(C++ Pocket Reference,O'Reilly)指出:"bool的典型大小是一个字节","char的大小是一个字节.技术上,字节的大小是实现定义的,但是它几乎不是八位."

我在这里误解了什么吗?你会给出什么答案?为什么?

Ker*_* SB 33

没有类型需要更少的char,因为根据定义sizeof(char) == 1.但是,所有类型的空间完全可能占用相同的空间.

(用16位表示每种类型(具有适当的异常浮点格式)就足以满足标准值范围要求;存在每种类型都有32位的实际硬件.)


Tam*_*man 11

如果一个程序声明了四个变量,一个是int类型,一个是float类型,一个是char类型,另一个是bool类型,哪个变量占用内存中的空间最小?

您发布的问题的真正问题在于:

occupy ... space in memory

如果要假设解释,那么在大多数情况下,你会假设当前流行的编译器之一,在这种情况下回答2并且4都会占用内存中的最小空间.很简单,因为当前流行的编译器做charbool占用内存中的单字节...

如评论中所述sizeof() is of type size_t,这是不可或缺的.

按照sizeof(char) == 1标准总是如此,价值是不可或缺的; 没有别人sizeof(T)可以低于1.但是,任何其他Tchar可以比更大1取决于依赖执行.因为你不能认为sizeof(char) == sizeof(bool)总是持有,你至少可以假设sizeof(char) <= sizeof(bool)持有.

这使得sizeof(char)最不正确的答案......


Ben*_*Lee 5

答案是char。没有其他答案是正确的。

(虽然我同意这个问题应该措辞更好)。

C++03 标准 $5.3.3/1 说:

sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 为 1;应用于任何其他基本类型 (3.9.1) 的 sizeof 结果是实现定义的。[注意:特别是 sizeof(bool) 和 sizeof(wchar_t) 是实现定义的。69)

(从另一个问题中找到此信息:为什么标准本身没有将 sizeof(bool) 定义为一个?)。

鉴于最小大小为 1(sizeof 必须返回整数值),这意味着在遵循标准的任何实现中,以下情况都成立:

sizeof(char) == 1
sizeof(bool) >= 1
sizeof(int) >= 1
sizeof(float) >= 1
Run Code Online (Sandbox Code Playgroud)

这个问题措辞不当,可能应该更清楚地提出“......哪个变量在内存中占用的空间不一定比其他变量多(在任何表现良好的 C++ 标准实现中)?”


Car*_*rum 2

该语言没有指定这些字体大小之间的任何关系来保证所提出的问题的正确答案。例如,它们可能都是 32 位类型。

  • 这不是同一个问题。更类似的是“该列表中的哪个索引包含最低值”?这个问题有三个同样好的答案。 (4认同)