C ++在类中声明静态枚举与枚举

时间:2015-02-24 22:13:01

标签: c++ class enums static nested

在如下所示的类声明中定义的static enumenum定义之间有什么区别?

class Example
{
     Example();
     ~Example();

     static enum Items{ desk = 0, chair, monitor };
     enum Colors{ red = 0, blue, green };
}

另外,既然我们在一个类中定义类型,我们称之为什么?通过类比,如果我在类中定义变量,我们称之为成员变量。

2 个答案:

答案 0 :(得分:11)

static无法应用于enum声明,因此您的代码无效。

来自N3337,§7.1.1/ 5 [dcl.stc]

  

static说明符只能应用于变量和函数的名称以及匿名联合......

enum声明不是那些。

您可以创建enum的实例,并根据需要制作static

class Example
{
     enum Items{ desk = 0, chair, monitor };
     static Items items; // this is legal
};

在这种情况下,items就像任何其他static data member一样。


这是MSVC bug;从链接的错误报告中,编译器似乎将允许static声明上的registerenum存储说明符。该错误已被修复,因此修复程序可能会在VS2015中使用。

答案 1 :(得分:0)

static是一个C ++存储说明符。这意味着该类成员的值对于该类的所有实例都是相同的。这里没有关于枚举的特别之处。

编辑:即使static标签维基也有解释。正是在这个话题上。

EDIT2:哦,我误读了你的代码。没有静态枚举。您可以拥有一个包含值的枚举类型的静态变量。