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

C++ declaring static enum vs enum in a class

在如下所示的 class 声明中定义时,static enumenum 定义有什么区别?

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

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

此外,由于我们在 class 中定义类型,我们如何称呼它们?以此类推,如果我在class中定义了一个变量,我们称它为成员变量。

static 是 C++ 存储说明符。这意味着 class 的这个成员的值对于 class 的所有实例都是相同的。这里的枚举没什么特别的。

编辑:甚至 static 标签 wiki 都有解释。正是关于这个话题。

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

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

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

The static specifier can be applied only to names of variables and functions and to anonymous unions ...

一个 enum 声明是其中的 none 个。

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

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

在这种情况下 items 与其他 static data member 一样。


这是一个MSVC bug;从链接的错误报告来看,编译器似乎将允许在 enum 声明中使用 staticregister 存储说明符。该错误已作为修复关闭,因此可能会在 VS2015 中提供修复。