在如下所示的类声明中定义时,
static enum
和 enum
定义有什么区别?
class Example
{
Example();
~Example();
static enum Items{ desk = 0, chair, monitor };
enum Colors{ red = 0, blue, green };
}
另外,由于我们在类中定义类型,那么我们如何称呼它们呢? 以此类推,如果我在类中定义了一个变量,我们称其为成员变量。
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
就像任何其他静态数据成员。
这是一个 MSVC bug;从链接的错误报告来看,编译器似乎将允许在
static
声明上使用 register
和 enum
存储说明符。该错误已被修复并关闭,因此也许该修复将在 VS2015 中可用。
static
是 C++ 存储说明符。这意味着该类的该成员的值对于该类的所有实例都是相同的。这里的枚举没有什么特别的。
编辑:甚至
static
标签 wiki 都有解释。正是在这个主题上。
EDIT2:哦,我误读了你的代码。没有静态枚举。您可以拥有一个保存值的枚举类型的静态变量。
类中的枚举是隐式静态的。 定义存在于类实例之外。 这就是你模糊定义的地方。 因为根据相同的逻辑,定义也是静态的。因此,虽然编译器可能允许这样做,但您不应该将类中的枚举声明为静态。 这并不是编译器第一次在允许和不允许的内容上出现差异。