2010-05-06 3 views
4
enum ABC{ 
A, 
B, 
C=5, 
D, 
E 
}; 

Гарантировано, что D и E не превышают 5?
Гарантировано, что A и B меньше 5 (если возможно)?Значение элементов перечисления, когда некоторые члены имеют пользовательские значения

редактировать: Что произойдет, если я говорю C=1

+0

Если C = 1, вы получите 0, 1, 1, 2, 3. Проверьте правило в своем ответе. –

ответ

11

Это гарантируется стандартом C++ 7.2/1:

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

+1

Таким образом, здесь A: 0, B: 1, C: 5, D: 6, E: 7. –

0

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

2

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

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

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

Смежные вопросы