Является ли enum внутри класса stati c? - PullRequest
2 голосов
/ 01 мая 2020

Внизу значения enum внутри класса могут быть доступны по имени класса. (Я даже не создавал экземпляр класса!)

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

private:
  Value value_;
};


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

Означает ли это, что enum в классе является stati c?

Если нет, как статически объявить enum?

1 Ответ

2 голосов
/ 01 мая 2020

Это

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

это объявление типа. Это не элемент данных класса включения. Класс имеет только этот закрытый элемент данных.

Value value_;

данных перечисления.

Объявление перечисления объявляет именованные перечислители. Но они, в свою очередь, не являются членами данных включающего класса.

То же самое, если вы объявите вложенную структуру внутри класса. Например,

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

    B b;
};

Вот только один элемент данных класса A, который является B b. Элемент данных внутри объявления структуры обеспечивает только объявление структуры B.

...