Если вы не дадите константе перечисления никаких значений, компилятор сделает это молча.
Первому всегда будет присвоено значение 0
, а каждая следующая константа перечисления получит значение предыдущей константы + 1.
В вашем случае {North,South}
, North
гарантированно равно 0, а South
гарантировано равно 1. Тип этих констант перечисления гарантированно на 100% совместим с int
.
Если вы ввели только некоторые значения явно, правило, в котором каждая константа, получающая значение предыдущего +1, все еще применимо. Поэтому, если вы сделаете {North,South,East=5,West}
, они получат значения 0, 1, 5, 6
.