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

问题描述 投票:0回答:3

在如下所示的类声明中定义时,

static enum
enum
定义有什么区别?

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

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

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

c++ class enums static nested
3个回答
18
投票

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 中可用。


0
投票

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

编辑:甚至

static
标签 wiki 都有解释。正是在这个主题上。

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


0
投票

类中的枚举是隐式静态的。 定义存在于类实例之外。 这就是你模糊定义的地方。 因为根据相同的逻辑,定义也是静态的。因此,虽然编译器可能允许这样做,但您不应该将类中的枚举声明为静态。 这并不是编译器第一次在允许和不允许的内容上出现差异。

© www.soinside.com 2019 - 2024. All rights reserved.