|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.05.2013, 23:21 | #1 |
Форумчанин
Регистрация: 07.04.2012
Сообщений: 216
|
Перечесление / enumiration
Дошел но enum'a, как инициализируется, объявляется - понял. Но так и не понял его предназначения, кроме как в if'ках, можете подсказать, где в основном используется перечисление?
|
31.05.2013, 23:44 | #2 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
enum используется для объявления и инициализации, связанных по смыслу, именованых констант...
Т.е, вместо: const int Monday = 0; const int Tuesdaay = 1; ... можно записать enum {Monday, Tuesday...}; |
01.06.2013, 01:59 | #3 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
1. Его можно использовать везде, где используется обычная интовая константа. Но в отличие от интовой константы, под значения перечислений гарантировано не будет выделена память. Пример использования: Код:
Это привентивно сокращает количество возможных ошибок в коде, а так же избавляет пользователя от необходимости выполнять проверку корректности значения arg Последний раз редактировалось _Bers; 01.06.2013 в 02:26. |
|
01.06.2013, 02:01 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Другой частый случай использования:
Код:
Код:
Код:
|
01.06.2013, 02:03 | #5 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Удобно работать с флагами состояний. Одна переменная типа int может заменить собой 32 булевые переменные:
Код:
Последний раз редактировалось _Bers; 01.06.2013 в 02:05. |
01.06.2013, 02:09 | #6 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Так же, енумы в силу своей природы (константы гарантированно времени компиляции) находят активное применение в метапрограммировании:
Для енума разрешается выполнять выражения: enum eExample { eValue = выражение }; Но поскольку, енум - константа,гарантированно времени компиляции, то своё значение eValue получит тоже именно времени компиляции. Это так же значит, что результат вычисления 'выражение' тоже должен быть времени компиляции. Суть метапрограммирования на языке с++ - это создание выражений, которые вычисляются времени компиляции, и присваивание их значений енумам, ну или ещё какие то жуткие операции над типами. Пример: Код:
В рантайме тупо подставляется готовый заранее уже известный результат. Другой пример: Код:
Последний раз редактировалось _Bers; 01.06.2013 в 02:30. |
01.06.2013, 16:54 | #7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
вот пример рекурсивного шаблона:
Код:
Здесь енум получает значение равное произведению своего параметра на значение другого енума, который содержится внутри точно такого же шаблона: Код:
Рекурсия доходит до шаблона с параметром <1>: Код:
Если проилюстрировать процесс рекурсии в псевдокоде, то получится что-то вроде: Код:
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перечесление из массивов. | ATAMAN200 | Общие вопросы C/C++ | 4 | 18.11.2010 19:13 |