С помощью ключевого слова enum вы фактически определяете тип, а не определяете хранилище как элемент данных.
Это похоже на определение внутреннего класса, например:
class X
{
private:
class InnerClass
{
...
};
};
Определение InnerClassэто просто определение.Он просто определяет тип в контексте внешнего класса X, поэтому InnerClass может упоминаться только как X :: InnerClass.Но это определенно не занимает места в экземплярах класса X.
Относительно замечания по перечислениям: значения перечисления на самом деле являются целыми числами, и эти целые числа используются в коде, где это необходимо.Обычно нет центрального хранилища всех значений перечисления.Перечисление просто определяет отображение между токеном и числовым значением, и везде, где токен используется в вашем коде, компилятор заменяет его числовым значением.