enum

    xiaoxiao2021-04-14  30

    枚举子的类型和取值       默认下,第一个枚举子被赋值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

    转载请注明原文地址: https://ju.6miu.com/read-669629.html

    最新回复(0)