С этими типами посложнее, чем в Delphi. Самый простой пример:
enum colors{RED, GREEN, BLUE};
RED, GREEN, BLUE - константы, равные числам 0, 1, 2 соответственно. Их значения можно задавать самостоятельно:
enum colors{RED=0, GREEN=1, BLUE=9}; //Должны быть целыми
Использование достаточно очевидно:
colors x = GREEN; //z == 1
colors z = 9; //Ошибка компиляции.
colors z = colors(9); //А вот так все хорошо. z == BLUE
if (z = BLUE) {/* */};
Любопытно (по крайней мере для меня), что переменной z можно присвоить другое значение кроме этих трех:
colors z = 2; //Как мы уже выяснили - это ошибка компиляции
colors z = colors(2); // Так можно. z == 2
Интересно, в каких пределах можно задавать значения? У меня не сошлось со Страуструпом.
Он говорит, что выделяется непрерывный диапазон, в зависимости от минимального и максимального значения. Диапазон определяется минимальным количеством бит, требуемым для представления перечисления. Пример оттуда:
enum e2{a=3, b=9} //диапазон 0:15
Поэтому, по его словам, e2 f2 = e2(20) не определено.
Границы диапазонов связаны со степенями двойки, но я не буду переписывать точное правило. Размер sizeof не может превышать sizeof(int).
Не знаю почему, но как я не крутил, sizeof всегда был равен 4. По всей вероятности sizeof(enum) = sizeof(int).
Вывод, который я сделал: Перечислимый тип - это фактически тот же int, но с личными именами некоторых чисел
Комментариев нет:
Отправить комментарий
Можно использовать теги <b>, <i>