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

时间:2011-06-27 17:03:27

标签: c++ enums

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

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

enum : size_type {   // size_type = size_t                   
                npos     = (size_type)-1,
                kMaxSize = (size_type)-2
            };

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分: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 .. };