C++Visual Studio 2010中的强类型枚举



当我在VS2010中使用强类型枚举时,例如:

enum eTest : long long
{
_test1                  = 0x0000000000000001,
_test2                  = 0x0000000000000002,
};

我收到此警告:

http://msdn.microsoft.com/en-us/library/ms173702.aspx

使用非标准扩展:指定枚举"枚举"的基础类型

这是为什么呢?我以为VS2010支持C++11?另外,在64-32位VS2010编译器之间基于64位的枚举是否安全?

编辑:

关于我问题的第二部分:我询问了 32 位与 64 位,因为在面向 64 位时来自 32 位枚举的 OR'ing 位标志会导致编译器错误。但是,我发现原因是因为启用Microsoft的代码分析会导致它中断。

C++11 枚举是这样完成的:

enum class eTest : long long
{
    _test1                  = 0x0000000000000001,
    _test2                  = 0x0000000000000002,
};

请参阅强类型枚举

[编辑:] 我相信VS 2010没有支持这一点的编译器。 我认为 MSVC++ 11 编译器仅部分支持 C++10 枚举

至于大小:查看此页面,其中讨论了数据类型的大小。 Microsoft 在其编译器的 32 位和 64 位版本之间变化不大。

VS 2010 不是完整的 C++11 实现:支持 C++11/14/17 功能(现代C++)

来自 VS2010 文档Microsoft:C++枚举声明

枚举的定义:

enum [tag] [: type] {enum-list} [declarator];
类型

是标识符的基础类型。这可以是任何标量类型,例如 int、short 或 long 的有符号或无符号版本。布尔或字符也是允许的。

它没有说明long long(也许文档没有更新)。

最新更新