Ответ 1
- Перечисление - это только значение r, а не lvalue. У него нет адреса.
- Перечислением может быть только константа времени компиляции, а не константа времени выполнения.
- Перечисления не добавляют никакого налета в объектный файл.
- Перечисление выполняется быстрее и использует меньше памяти во время компиляции. Обычно это незначительно, но если вы выполняете достаточно сложное метапрограммирование, это может начать иметь значение.
В общем, для вещей, которые являются константами времени компиляции, в отличие от констант времени выполнения, нет никакого недостатка в использовании перечисления, и у него есть преимущества сделать ваши намерения абсолютно ясными и быть менее эффективными.
Изменить: другой вариант использования для перечислений может быть несовместимым с компилятором, следует ли оценивать функцию во время выполнения или время компиляции. Если результат функции присваивается переменной стека immutable
, функция будет оцениваться во время выполнения. Если вы используете enum
в той же области видимости, результат будет оцениваться во время компиляции.