我正在编译为GCC编写的代码,在Visual C++ 2012中。我收到以下枚举引发的有关enum值截断的警告(由于值超出了int范围) :任意大小的枚举值
enum tile_flags {
TILE_FLAG_INNER_FLAME= 0x10000000ULL,
TILE_FLAG_CONSTRICTED= 0x20000000ULL,
TILE_FLAG_MIMIC_INEPT 0x2000000000ULL
TILE_FLAG_MIMIC 0x4000000000ULL
TILE_FLAG_MIMIC_RAVEN 0x6000000000ULL
TILE_FLAG_MIMIC_MASK 0x6000000000ULL
}
当编译为x86时,它会出现MSVC只是截断枚举值,以适应32位。但是,在GCC中不会发生截断。 GCC上发生了什么?我该如何为MSVC做这项工作?
哇,不知道你能做到这一点!类型'tile_flags'是否还有类型安全性,还是编译器在这种情况下将它视为'unsigned long long'? – RandyGaul 2013-05-14 17:46:16
@RandyGaul,是的,它仍然是一个独特的类型。它只是使用无符号的long long来存储值。这是一个C++ 11功能。你也可以有范围的枚举,它强制你使用'EnumName :: Value'并且不会隐式地转换为整数。 – chris 2013-05-14 17:48:56
太好了,谢谢分享。 – RandyGaul 2013-05-14 17:49:17