Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+;中枚举类型数据的大小是多少+;? 这是一个C++面试题,不是作业。p> #include <iostream> using namespace std; enum months_t { january, february, march, april, may, june, july, august, september, october, november, december} y2k; int main () { cout << "sizeof months_t is " << sizeof(months_t) << endl; cout << "sizeof y2k is " << sizeof(y2k) << endl; enum months_t1 { january, february, march, april, may, june, july, august, september, october, november, december} y2k1; cout << "sizeof months_t1 is " << sizeof(months_t1) << endl; cout << "sizeof y2k1 is " << sizeof(y2k1) << endl; } #包括 使用名称空间std; 枚举月份{1月、2月、3月、4月、5月、6月、7月、8月、9月, 10月、11月、12月}y2k; int main() { cout_C++_Enums_Sizeof - Fatal编程技术网

C+;中枚举类型数据的大小是多少+;? 这是一个C++面试题,不是作业。p> #include <iostream> using namespace std; enum months_t { january, february, march, april, may, june, july, august, september, october, november, december} y2k; int main () { cout << "sizeof months_t is " << sizeof(months_t) << endl; cout << "sizeof y2k is " << sizeof(y2k) << endl; enum months_t1 { january, february, march, april, may, june, july, august, september, october, november, december} y2k1; cout << "sizeof months_t1 is " << sizeof(months_t1) << endl; cout << "sizeof y2k1 is " << sizeof(y2k1) << endl; } #包括 使用名称空间std; 枚举月份{1月、2月、3月、4月、5月、6月、7月、8月、9月, 10月、11月、12月}y2k; int main() { cout

C+;中枚举类型数据的大小是多少+;? 这是一个C++面试题,不是作业。p> #include <iostream> using namespace std; enum months_t { january, february, march, april, may, june, july, august, september, october, november, december} y2k; int main () { cout << "sizeof months_t is " << sizeof(months_t) << endl; cout << "sizeof y2k is " << sizeof(y2k) << endl; enum months_t1 { january, february, march, april, may, june, july, august, september, october, november, december} y2k1; cout << "sizeof months_t1 is " << sizeof(months_t1) << endl; cout << "sizeof y2k1 is " << sizeof(y2k1) << endl; } #包括 使用名称空间std; 枚举月份{1月、2月、3月、4月、5月、6月、7月、8月、9月, 10月、11月、12月}y2k; int main() { cout,c++,enums,sizeof,C++,Enums,Sizeof,大小为四个字节,因为enum存储为int。仅使用12个值,实际上只需要4位,但32位机器处理32位数量的效率高于较小数量 0 0 0 0 January 0 0 0 1 February 0 0 1 0 March 0 0 1 1 April 0 1 0 0 May 0 1 0 1 June 0 1 1 0 July 0 1 1 1 August 1 0 0 0 September 1 0 0 1 October 1 0 1 0 November 1 0 1 1 Dece

大小为四个字节,因为
enum
存储为
int
。仅使用12个值,实际上只需要4位,但32位机器处理32位数量的效率高于较小数量

0 0 0 0  January
0 0 0 1  February
0 0 1 0  March
0 0 1 1  April
0 1 0 0  May
0 1 0 1  June
0 1 1 0  July
0 1 1 1  August
1 0 0 0  September
1 0 0 1  October
1 0 1 0  November
1 0 1 1  December
1 1 0 0  ** unused **
1 1 0 1  ** unused **
1 1 1 0  ** unused **
1 1 1 1  ** unused **

如果没有枚举,您可能会尝试使用原始整数来表示月份。这会很有效,但会使代码难以阅读。使用枚举,您可以获得高效的存储和可读性。

因为它是该类型实例的大小-枚举值可能存储为(32位/4字节)这里是整数。

枚举几乎是一个整数。要简化很多

enum yourenum { a, b, c };
几乎是

#define a 0
#define b 1
#define c 2

当然,这不是真的。我试图解释枚举是某种编码…

枚举有点像int类型的typedef(某种类型)

因此,您在这里定义的类型有12个可能的值,但是单个变量只有其中一个值

这样想,当您定义一个枚举时,您基本上是在定义另一种分配int值的方法


在您提供的示例中,一月是表示0的另一种方式,二月是表示1的另一种方式,等等,直到十二月是表示11的另一种方式。

视情况而定。标准只要求它足够大以容纳所有值,因此正式使用类似于
enum foo{zero,one,two}的枚举;
只需要一个字节大。然而,大多数实现使这些枚举与int一样大(这在现代硬件上更快;此外,它还需要与C兼容,其中枚举基本上是美化的int)但是,注意C++允许初始化器在INT范围之外,对于那些枚举,大小当然也会更大。例如,如果你有<代码>枚举条{a,b= 1LL。

这是一个C++面试题,不是作业。

#include <iostream>
using namespace std;
enum months_t { january, february, march, april, may, june, july, august, september,    
  october, november, december} y2k;

 int main ()
  {
    cout << "sizeof months_t is  " << sizeof(months_t) << endl;
    cout << "sizeof y2k is  " << sizeof(y2k) << endl;
    enum months_t1 { january, february, march, april, may, june, july, august,    
       september, october, november, december} y2k1;
    cout << "sizeof months_t1 is  " << sizeof(months_t1) << endl;
    cout << "sizeof y2k1 is  " << sizeof(y2k1) << endl;
 }
<> P>你的采访者需要重新回忆一下C++标准是如何工作的: 对于基础类型不是固定的枚举,基础类型是一个整数类型,可以表示枚举中定义的所有枚举数值

整个“其基础类型不固定”部分来自C++11,但其余部分都是标准的C++98/03。简言之,
sizeof(months\u t)
不是4。也不是2。它可以是其中的任何一个。标准没有说明它应该是什么大小,只是它应该足够大以适合任何枚举数

为什么所有大小都是4字节?不是12 x 4=48字节

因为枚举不是变量。枚举的成员不是实际变量;它们只是#define的半类型安全形式。它们是一种以读者友好的格式存储数字的方法。编译器将枚举数的所有用途转换为实际的数值


< >枚举器只是一个数字的另一种方式。<代码>一月<代码>只是代码< 0 > /Cort >的缩写。0占用了多少空间?这取决于您存储在其中的什么。

< P>用我现在正在老化的Borland C++ +Builder编译器,枚举枚举可以是1,2或4字节,尽管它有一个标志,您可以翻转以强制它使用int。< /P>
我想这是特定于编译器的。

我喜欢EdX(Microsoft:DEV210x C++简介)对类似问题的解释:


枚举将天的文字值表示为整数。参考“数值类型”表,您可以看到一个int需要4字节的内存。如果存储整个枚举,则7天x 4字节需要28字节的内存,但编译器只使用枚举的一个元素,因此内存中的大小实际上是4字节

我认为标准要求enum与integer相同。C++11引入了enum类。可能是这样。有引用吗?没有-四位变量可以表示十六个不同值中的任何一个。每个月不需要额外的四位。如果要将月份存储为位向量,则只需要12位。这样仍然可以安全地放入4个字节。原始答案是正确的。枚举必须至少是一个字节,但编译器可以自由使用更多内存。而且,由于可以在数组中使用枚举,
sizeof
必须是对齐方式的倍数。不能将一个字节的枚举对齐为4个字节。在C++11之前,依赖sizeof是一个“非常糟糕的主意[TM]”(枚举值)没有人提到EnUM类?我希望C++ C++能在这样的问题上超越职责的职责。解压OP是一天中的第一顺序。但是,没有什么能阻止你在EnUM类上进行权衡。@ MattCounER,你是说C++ 11中可以指定枚举的基础类型,即它是哪一个完整类型?模仿?例如
enum month:char{january,…};
。类枚举,又称作用域枚举,是另一种为其常量创建封闭命名空间的类。问题是类枚举始终是固定的底层类型(
int
,如果未指定)@MattJoiner:没有人提到枚举类,因为这是C++11的特性,他也没有问C++11的特性。而且,这与本例完全无关。这是关于枚举数的数量和类型大小之间的关系(是对数的,不是线性的)。这是一个不容忽视的极好答案。虽然我的答案提供了理解枚举的基础知识,但如果你希望通过此类面试问题,你确实需要能够掌握这一级别的枚举。谢谢@Bolas,但你回避了为什么编译器选择
4字节
,而不是相应的最小字节数ects标准要求,即
1字节
(12个不同的枚举数:
4位