enum

枚举子的类型和取值
      默认下,第一个枚举子被赋值0,接下来的枚举子取值是前面一个枚举子的取值+1,例如:
      enum weather {sunny, cloudy, rainy, windy};
其中
     sunny == 0, 
      cloudy == 1,
      rainy == 2,
      windy == 3;
       以上是默认情况,有时候我们希望显式地指定某个枚举子的值,那么会出现什么情况呢?看看:
       enum some_fruit {apple = 3, orange, banana = 4, bear};
       好了,apple = 3, banana = 4; 那么orange和bear呢?记得前面说过一句,默认下”接下来的枚举子取值是前面一个枚举子的取值+1“。既然这两个枚举子没有显式赋值,那么就按照默认规则办事,所以 orange = 4, bear = 5. 
         从这个例子也可以看出,同一枚举中枚举子的取值不需要唯一。


枚举的取值范围

   如果某个枚举中所有枚举子的值均非负整数,该枚举的表示范围就是[0:2^k-1],其中2^k是能使所有枚举子都位于此范围内的最小的2的幂;如果存在负的枚举值,该枚举的取值范围就是[-2^k,2^k-1].不能为浮点数。例如:
     enum e1 {dark, light}; //范围0:1

    enum e3 {min = -10, max = 1000}; //范围-1024:1023


枚举与整型的关系

    枚举型可以自动转换成整数,但是不能整数自动转为枚举型

    enum e1 {...};

    enum e1=1;//错!

    整型值只能显式地转换成一个枚举值,但是,如果转换的结果位于该枚举取值范围之外,则结果是无定义的。

     enum e1 {dark = 1, light = 10};
     e1 VAR1 = e1(50); //无定义
     e1 VAR2 = e1(3); //编译通过
     在这里也说明了不允许隐式地从整型转换到枚举的原因,因为大部分整型值在特定的枚举里没有对应的表示。 

sizeof

   该问题就是sizeof( EType1 )等于多少的问题,是不是每一个用户自定义的枚举类型都具有相同的尺寸呢?
 
在大多数的32位编译器下(如:VC++gcc等)一个枚举类型的尺寸其实就是一个sizeof( int )的大小,难道枚举类型的尺寸真的就应该是int类型的尺寸吗?
 
其实不是这样的,在C++标准文档(ISO14882)中并没有这样来定义, 
 
标准中是这样说明的:“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”,
 
同时标准中也说名了:“枚举类型中的枚举子的值必须要能够用一个int类型表述”
 
 
也就是说,枚举类型的尺寸不能够超过int类型的尺寸,但是是不是必须和int类型具有相同的尺寸呢?
 
上面的标准已经说得很清楚了,只要能够容纳最大的枚举子的值的整数就可以了,那么就是说可以是charshortint

因此有的编译器sizeof为4 有的为1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值