C++中的64位枚举?

Rob*_*Rob 19 c++ 64-bit enums

有没有办法在C++中使用64位枚举?虽然重构了一些代码,但我遇到了一堆#defines,它们作为枚举会更好,但是大于32位会导致编译器出错.

出于某种原因,我认为以下可能有效:

enum MY_ENUM : unsigned __int64  
{  
    LARGE_VALUE = 0x1000000000000000,  
};
Run Code Online (Sandbox Code Playgroud)

Fer*_*cio 17

我认为C++ 98不可能.枚举的底层表示取决于编译器.在这种情况下,您最好使用:

const __int64 LARGE_VALUE = 0x1000000000000000L;
Run Code Online (Sandbox Code Playgroud)

从C++ 11开始,可以使用枚举类来指定枚举的基类型:

enum class MY_ENUM : unsigned __int64 {
    LARGE_VALUE = 0x1000000000000000ULL
};
Run Code Online (Sandbox Code Playgroud)

此外,枚举类引入了新的名称范围.因此LARGE_VALUE,您可以参考而不是参考MY_ENUM::LARGE_VALUE.


Leo*_*ans 17

C++ 11使用以下语法支持此功能:

enum class Enum2 : __int64 {Val1, Val2, val3};
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`class`仍然是可选的.如果你想要旧式枚举,但是使用自定义类型,你也可以`enum moo:long long {...}` (5认同)

mlo*_*kot 5

当前的所谓C++ 0x草案,它是n30927.2枚举声明中说的,第6段:

它是实现定义的,其中整数类型用作底层类型,除了底层类型不应大于int,除非枚举器的值不能适合int或unsigned int.

同一段也说:

如果没有整数类型可以表示所有枚举器值,则枚举是不正确的.

除非枚举器的值不适合int或unsigned int,否则我对该部分的解释 是,只要在特定的C++中提供64位整数类型,初始化具有64位整数值的枚举器是完全有效和安全的.实现.

例如:

enum MyEnum
{
    Undefined = 0xffffffffffffffffULL
};
Run Code Online (Sandbox Code Playgroud)

  • 如果你不想数你的f,你可以做'Undefined = ~0x0ULL` (3认同)