C++ 在 class 中声明静态枚举与枚举
C++ declaring static enum vs enum in a class
在如下所示的 class 声明中定义时,static enum
和 enum
定义有什么区别?
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
声明中使用 static
和 register
存储说明符。该错误已作为修复关闭,因此可能会在 VS2015 中提供修复。
在如下所示的 class 声明中定义时,static enum
和 enum
定义有什么区别?
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
声明中使用 static
和 register
存储说明符。该错误已作为修复关闭,因此可能会在 VS2015 中提供修复。