强制枚举为unsigned long类型

ezp*_*sso 15 c++ enums types

是否可以强制枚举的基础类型为unsigned long类型?谢谢

tem*_*def 30

在C++ 03中,没有办法强制枚举类型具有任何特定的底层实现.C++规范,§7.2/ 5:

枚举的基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值.它是实现定义的,其中整数类型用作枚举的基础类型,除了基础类型不应大于int,除非枚举器的值不能适合int或unsigned int.如果枚举器列表为空,则基础类型就好像枚举具有值为0的单个枚举器.应用于枚举类型,枚举类型的对象或枚举器的sizeof()的值是sizeof()应用于基础类型.

这是一个非常宽松的条件,并且说你不仅不一定知道类型,而且因为它是实现定义的,所以不能保证它甚至可以对应于一种原始类型.

但是,在C++ 0x中,他们正在修复它,以便您可以明确提到您想要的类型:

enum MyEnumeration: unsigned long {
   /* ... values go here ... */
};
Run Code Online (Sandbox Code Playgroud)

这将允许您显式控制基础类型.