2

当我在 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 位,因为在针对 32 位时来自 64 位枚举的 OR'ing 位标志会导致编译器错误。但是我发现原因是因为启用微软的代码分析会导致这个问题。

4

2 回答 2

3

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

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

请参阅强类型枚举

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

至于大小:查看这个关于数据类型大小的页面。Microsoft 在其编译器的 32 位和 64 位版本之间没有太大差异。

于 2012-10-10T16:05:10.977 回答
0

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

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

枚举的定义:

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

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

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

于 2019-01-08T15:03:17.377 回答