Бьерн Страуструп - Язык программирования С++. Главы 2-4
Страница 25. Перечисления



2.5.1.  Перечисления

Есть способ связывания имен с целыми константами, который часто более
удобен, чем описание с const. Например:

      enum { ASM, AUTO, BREAK };

Здесь определены три целых константы, которые называются элементами
перечисления, и им присвоены значения. Поскольку по умолчанию значения
элементов перечисления  начинаются с 0 и идут в возрастающем порядке,
то приведенное перечисление эквивалентно определениям:

       const ASM = 0;
       const AUTO = 1;
       const BREAK = 2;

Перечисление может иметь имя, например:

       enum keyword { ASM, AUTO, BREAK };

Имя перечисления становится новым типом. С помощью стандартных
преобразований тип перечисления может неявно приводиться к типу int.
Обратное преобразование (из типа int в перечисление) должно быть задано
явно. Например:

         void f()
         {
           keyword k = ASM;
           int i = ASM;
               k = i     // ошибка
               k = keyword(i);
               i = k;
               k = 4;    // ошибка
          }

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

          keyword key;

          switch (key) {
          case ASM:
           // выполнить что-либо
              break;
          case BREAK:
           // выполнить что-либо
              break;
          }

транслятор может выдать предупреждение, поскольку из трех возможных
значений типа keyword используются только два.
    Значения элементов перечисления можно задавать и явно. Например:

          enum int16 {
              sign=0100000,
              most_significant=040000,
              least_significant=1
          };

Задаваемые значения необязательно должны быть различными, положительными
и идти в возрастающем порядке.

 
« Предыдущая статья   Следующая статья »