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
           };

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


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.