значение членов перечисления, когда некоторые члены имеют пользовательские значения - PullRequest
4 голосов
/ 06 мая 2010
enum ABC{
 A,
 B,
 C=5,
 D,
 E
};

Гарантированно ли D и E больше 5?
Гарантированно ли A и B меньше 5 (если возможно)?

edit : Чтопроизойдет, если я скажу C=1

Ответы [ 3 ]

11 голосов
/ 06 мая 2010

Гарантируется C ++ Standard 7.2 / 1:

Идентификаторы в списке перечислителей объявляются как константы и могут появляться везде, где константы требуется. Определение перечислителя с = дает ассоциированному перечислителю значение, указанное константа-выражение. Выражение-константа должно иметь тип целого или перечисления. Если первый перечислитель не имеет инициализатора, значение соответствующей константы равно нулю. Определение перечислителя без инициализатора дает перечислителю значение, полученное путем увеличения значения предыдущего счетчик по одному.

2 голосов
/ 06 мая 2010

В вашей ситуации, да (см. Ответ Кирилла). Однако остерегайтесь следующей ситуации :

enum ABC
{ 
  A,
  B,
  C = 5,
  D,
  E,
  F = 4,
  G,
  H
};

Компилятор не будет избегать коллизий с ранее использованными значениями и не будет пытаться сделать каждое значение больше всех предыдущих значений. В этом случае G будет больше, чем F, но не C, D или E.

0 голосов
/ 06 мая 2010

Да, это гарантировано, и значения A и B должны быть 0 и 1 соответственно.

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