Перечисления не занимают места и являются неизменяемыми.
Если бы вы использовали const int color = 1;
, то вы бы решили проблему изменчивости, но если бы кто-то взял адрес color
(const int* p = &color;
), тогда для него пришлось бы выделить место. Это может не иметь большого значения, но если вы явно не хотите, чтобы человек могли взять адрес color
, вы могли бы также предотвратить его.
Также при объявлении константного поля в классе оно должно быть static const
(не верно для современного C ++) , и не все компиляторы поддерживают встроенную инициализацию статических константных членов.
Отказ от ответственности: Этот ответ не следует воспринимать как совет по использованию enum
для всех числовых констант. Вы должны делать то, что вы (или ваши коровники) считаете более читабельным. В ответе просто перечислены некоторые причины, по которым может предпочитает использовать enum
.