当在类声明内定义如下所示的枚举时,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错误。从相关的错误报告可以看出,编译器将允许enum
声明中使用static
和register
存储类说明符。该错误已被标记为已修复,因此可能会在VS2015中提供修复程序。
static
没有应用于此声明中声明的 0 个数据成员集。毕竟,如果您执行了 static enum Items { ... } item;
,它将是有效的。 - Brian Bistatic
应用于不声明任何变量/数据成员的枚举声明---如果枚举声明可以声明0个该类型的变量,则为什么不能声明0个静态变量?但标准明确禁止这样做,所以我现在对gcc和clang的正确性感到满意。 - Brian Bistatic
是C++的存储说明符。它意味着类的成员变量对于该类的所有实例都是相同的。这里与枚举没有什么特别之处。
编辑:即使是static
标签的wiki也有解释。就是关于这个话题的。
编辑2:哦,我误读了你的代码。没有静态枚举。您可以拥有一个枚举类型的静态变量来保存值。
static
就没有太多意义,所以我觉得它很难编译通过。 - swalogenum class
。 - Dai