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

use*_*622 12 c++ enums static nested class

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

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

     static enum Items{ desk = 0, chair, monitor };
     enum Colors{ red = 0, blue, green };
}
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*ian 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
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下items就像任何其他静态数据成员一样.


这是一个MSVC错误 ; 从链接的错误报告中,似乎编译器将允许声明staticregister存储说明符enum.该错误已被修复,因此修复程序可能会在VS2015中提供.