Относительно лучших практик:
Если у вас нет конкретной причины делать перечисление байтом типа, вы должны оставить его по умолчанию.
Каждый раз, когда вы используете enum в операторе switch, вы должны иметь предложение «default» для недопустимого значения enum. Поэтому не имеет значения, проверяете ли вы 256-NumRealEnumValues или 2 ^ 32-NumRealEnumValues. Оба будут иметь предложение по умолчанию, которое обрабатывает все недопустимые случаи.
Одна из причин явной установки типа перечисления, если вы хотите, чтобы ваше перечисление соответствовало другому типу в вашей программе, и вам нужно явно привести между ними.
Изменение типа на наименьшее соответствие также не поможет вам с проблемами управления версиями. Если у вас точно не указан максимальный размер перечисления. Под проблемами управления версиями я подразумеваю, когда у вас есть скомпилированная dll с использованием enum, а затем вы добавляете новое значение enum, может выполняться некоторый код, который не предназначен для включения в предложение «default» оператора switch.
Относительно эффективности:
Нет, нет никакой выгоды с точки зрения эффективности, чтобы сделать его байтом.
int более эффективен в использовании, поскольку процессор на x86 имеет 32-битные регистры. Копирование в регистр выполняется за 32 бита за раз.
Когда вы используете меньший тип, вы должны обнулить часть регистра и скопировать остальные биты младшего разряда регистра.