class 中的枚举是静态的吗?

Is the enum inside a class static?

在下文中,class中的enum的值可以通过class的名称访问。(我什至没有实例化 class!)

class Shifting
{
public:
  enum Value: char
  {
    UP, RIGHT, DOWN, LEFT
  };

private:
  Value value_;
};


std::cout << Shifting::RIGHT << std::endl; // 1

这是否意味着 class 中的枚举是静态的?

如果不是,如何静态声明枚举?

这个

enum Value: char
{
  UP, RIGHT, DOWN, LEFT
};

这是一个类型声明。它不是封闭 class 的数据成员。 class 只有这个私有数据成员。

Value value_;

枚举数据。

枚举声明声明了命名枚举数。但它们又不是封闭 class.

的数据成员

如果在 class 中声明嵌套结构,也是一样的。例如

struct A
{
    struct B
    {
        int x = 10;
    };

    B b;
};

这里只有classA的一个数据成员B b。结构体声明里面的数据成员只提供了结构体B的声明。