enum
работает так, давайте рассмотрим ваш пример:
enum r { one, two = 4, three = 1, four};
one
начинается с 0
, поскольку начальное значение не определено.
two
определяется как 4
, если он не был объявлен как 4
, two
будет 1
.
three
определяется как 1
, если two
и three
не были объявлены ранее, вместо этого будет 2
, но это 1
.
four
не имеет никакого равенства, поэтому он получит следующее назначенное значение, поскольку three
было 1, four
будет 2
.
Если бы значения не были назначены, это выглядело бы так:
enum r { one, two, three, four};
one
= 0
, two
= 1
, three
= 2
, four
= 3
.
Надеюсь, это вам поможет.