有没有办法在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)
当前的所谓C++ 0x草案,它是n3092在7.2枚举声明中说的,第6段:
它是实现定义的,其中整数类型用作底层类型,除了底层类型不应大于int,除非枚举器的值不能适合int或unsigned int.
同一段也说:
如果没有整数类型可以表示所有枚举器值,则枚举是不正确的.
除非枚举器的值不适合int或unsigned int,否则我对该部分的解释 是,只要在特定的C++中提供64位整数类型,初始化具有64位整数值的枚举器是完全有效和安全的.实现.
例如:
enum MyEnum
{
Undefined = 0xffffffffffffffffULL
};
Run Code Online (Sandbox Code Playgroud)