枚举类型宽度?

时间:2011-04-04 22:54:31

标签: c# c++ c size enumeration

快速提问。枚举类型有多宽?它们是表示枚举所需的最小宽度还是所有enum int?如果它们是整数,你可以改变枚举的宽度,还是你必须为每次出现输入强制转换?

4 个答案:

答案 0 :(得分:6)

(这是针对C ++)

来自标准:

  

枚举的基础类型   是一种可以代表的整体类型   中定义的所有枚举器值   枚举。它是   实现 - 定义哪个积分   type用作底层类型   列举除了   基础类型不应该更大   除了枚举器的值,否则比int   不适合int或   unsigned int。如果是枚举器列表   是空的,底层类型就好像   枚举只有一个   值为0的枚举器。值   sizeof()应用于枚举   type,枚举类型的对象,   或者一个普查员,是值的   sizeof()应用于底层   类型。

在C ++ 0x中,您可以定义枚举的基础类型,如下所示:

enum foo : unsigned int { bar, baz };

另请注意,新的强类型枚举(“enum class”)具有默认的基础类型int。

答案 1 :(得分:2)

在C和C ++中,它们是整数。类型转换不会在最轻微的情况下更改它们,除非您将它们更改为更窄的整数类型(char,short)。

答案 2 :(得分:2)

这与您标记此问题的语言不同。
在C和C ++ 03中,枚举的基础类型是实现定义。在C ++ 0x中,我们可以声明自己的基础类型,称为强类型枚举(或枚举类):

// declares an enum with underlying type `unsigned char`
enum class MyEnum : unsigned char {/*...*/};

答案 3 :(得分:1)

在C#中,您可以指定基础类型,如果未指定,则默认值为Int32

public enum ThirtyTwoBitsWide
{
    This, Is, The, Default, Size
}

public enum EightBitsWide : byte
{
    Explicitly, Specify, The, Underlying, Size
}