这个冒号在枚举声明中做了什么?

Sam*_*rsa 14 c++ enums

我搜索了这个问题,认为有人必须先问过这个问题.我没有发现任何结果,所以如果有,请发布链接并随时关闭问题.

我在EASTL中遇到了这段代码:

enum : size_type {   // size_type = size_t                   
                npos     = (size_type)-1,
                kMaxSize = (size_type)-2
            };
Run Code Online (Sandbox Code Playgroud)

我从未遇到过这样的enum声明.:在这种情况下做什么?

GMa*_*ckG 13

在C++ 0x中,您可以指定枚举的基础类型.在这种情况下,它将是size_type.

(显然,它可能在C++ 0x之前的其他地方作为扩展支持.)

  • @Jesse:实际上,没有 `class` 的代码在 C++11 及更高版本中工作得很好。使用 `enum class` 或 `enum struct` 而不是普通的 `enum` 只会使枚举 *scoped* 而不是 *unscoped*,即,它可以防止隐式整数转换。在任何一种情况下都可以提供基础类型。 (2认同)

Jes*_*all 10

这是一个Microsoft扩展,允许您选择枚举值的基本类型.例如,这允许您指定值是无符号的(Microsoft的编译器通常选择默认签名)或者它们仅占用8位或16位(Microsoft通常默认为32位).

语法记录在这里:http://msdn.microsoft.com/en-us/library/2dzy4k6e(v = VS.100).aspx但我无法找到它实际上做的官方文档.

C++ 11增加了类似的功能,但语法略有不同.在C++ 11中,你会这样写:

enum class MyEnum : size_type { .. values .. };
Run Code Online (Sandbox Code Playgroud)