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

时间:2012-03-04 23:50:14

标签: c++ types

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

  

C ++基础知识

     

如果一个程序声明了四个变量,一个是类型int,一个是类型   float,类型char之一,类型bool之一,即变量   会占用内存中至少的空间吗?

     
      
  1. INT
  2.   
  3.   
  4.   
  5. BOOL
  6.   

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

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

10 个答案:

答案 0 :(得分:32)

没有类型而不是char,因为根据定义sizeof(char) == 1。但是,所有类型完全有可能采用相同的空间量。

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

答案 1 :(得分:11)

  

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

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

occupy ... space in memory

如果要假设解释,那么在大多数情况下,您会假设当前流行的编译器之一,在这种情况下,答案24将占用内存中的最小空间。仅仅因为当前流行的编译器使charbool在内存中占用一个字节...

正如评论中所述,sizeof() is of type size_twhich is integral

由于sizeof(char) == 1始终符合标准,因此值是积分的;没有其他sizeof(T)可以低于1。但是除了T之外的任何其他char都可以大于1依赖于实现。由于你无法假设sizeof(char) == sizeof(bool)总是成立,你至少可以假设sizeof(char) <= sizeof(bool)成立。

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

答案 2 :(得分:4)

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

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

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

  

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

(从另一个问题中找到此信息:Why the sizeof(bool) is not defined to be one, by the Standard itself?)。

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

sizeof(char) == 1
sizeof(bool) >= 1
sizeof(int) >= 1
sizeof(float) >= 1

这个问题措辞很差,可能应该更清楚地被问到“......哪个变量在内存中不会占用任何其他空间(在任何表现良好的C ++标准实现中)?”

答案 3 :(得分:2)

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

答案 4 :(得分:2)

我认为正确的答案应该是2.根据定义,char是最小的可寻址单元。

另见:Why is a char and a bool the same size in c++?

答案 5 :(得分:2)

C ++标准给出了以下关系:

sizeof(char) == 1
sizeof(char) <= sizeof(int) <= sizeof(long)
sizeof(float) <= sizeof(double)

...

答案 6 :(得分:1)

不保证这些类型的确切大小,但有一个保证,char不大于short,short不大于long。

因此,char将始终占用最少的内存,但它可能不是唯一一个这样做的内存。它仍然有保证,没有别的东西会有更小的尺寸。

然而,在一些特殊的嵌入式微控制器上,bool可能有例外。它们可以有一个bit变量,只需要一位,但是它们不在RAM中,而是在特殊的寄存器中。

但是,除非您的体系结构和编译器特别奇怪或不寻常,否则您可以合理地预期char为1,short为2,long为4,long long是8,int是2或4,但通常是4个字节。

答案 7 :(得分:0)

sizeof(bool)是实现定义的。

Is sizeof(bool) defined?

即, required 只是一个字节。

答案 8 :(得分:0)

正确答案在理论上是布尔值,因为char需要至少8位的知识,而bool在技术上只需要一位。如果你在理论上想要的话,你可以在一个字母内部粉碎8个bool。

答案 9 :(得分:0)

bool典型大小是一个字节。并不意味着总是是一个字节< / em>的。问题要么指的是没有一个字节大小bool的实现,要么意味着只有一个变量的大小最小。