Имеет ли значение, если я сделаю перечисление в классе static? - PullRequest
1 голос
/ 15 октября 2010

В принципе, если я не сделаю, чтобы все объекты получили копию всех значений перечисления?

ps: как всегда, ссылки на ваш ответ всегда приветствуются ...

Ответы [ 5 ]

2 голосов
/ 15 октября 2010

С помощью ключевого слова enum вы фактически определяете тип, а не определяете хранилище как элемент данных.

Это похоже на определение внутреннего класса, например:

class X
   {
   private:
      class InnerClass
         {
         ...
         };
   };

Определение InnerClassэто просто определение.Он просто определяет тип в контексте внешнего класса X, поэтому InnerClass может упоминаться только как X :: InnerClass.Но это определенно не занимает места в экземплярах класса X.

Относительно замечания по перечислениям: значения перечисления на самом деле являются целыми числами, и эти целые числа используются в коде, где это необходимо.Обычно нет центрального хранилища всех значений перечисления.Перечисление просто определяет отображение между токеном и числовым значением, и везде, где токен используется в вашем коде, компилятор заменяет его числовым значением.

2 голосов
/ 15 октября 2010

Нельзя объявлять вложенный тип (например, enum) статическим. Синтаксически.

0 голосов
/ 15 октября 2010

enum {..} s не занимают места в вашей программе. Только объекты, объявленные как этот перечислимый тип, занимают любое пространство . Даже в этом случае вряд ли будет больше места, чем вписывается в машинный регистр (поскольку они совместимы с целочисленными типами).

Единственное место, где когда-либо будет какое-либо хранилище, связанное со всеми перечисленными именами и значениями, определенными для типа, это во время компиляции. Во время выполнения вся эта информация является ненужной (и, следовательно, отсутствует).

0 голосов
/ 15 октября 2010

Перечисления не содержат все возможные значения. Различные возможные значения существуют в коде только во время компиляции. Во время выполнения каждый экземпляр перечисления по существу является интегральным значением.

0 голосов
/ 15 октября 2010

Вы не можете, это не имеет смысла.Каждый экземпляр не хранит значения, они будут хранить значение, которое происходит из перечисленных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...