Быстрый вопрос.Насколько широко перечислены типы?Они имеют минимальную ширину, необходимую для представления перечисления, или все перечисления являются целочисленными?Если это целые числа, можете ли вы изменить ширину перечислений или вам придется печатать приведение для каждого вхождения?
(Это для C ++)
Из стандарта:
Базовый тип перечисления является целочисленным типом, который может представлять все значения перечислителя, определенные в перечислении.Это определяется реализацией, какой целочисленный тип используется в качестве базового типа для перечисления, за исключением того, что базовый тип не должен быть больше, чем int, если значение перечислителя не может поместиться в int или unsigned int.Если список перечислителя пуст, базовый тип выглядит так, как если бы перечисление имело единственный перечислитель со значением 0. Значение sizeof (), примененное к типу перечисления, объекту типа перечисления или перечислителю, является значениемsizeof () применяется к базовому типу.
В C ++ 0x вы можете определить базовый тип перечисления следующим образом:
enum foo : unsigned int { bar, baz };
Также обратите внимание, что новый сильноТипизированные перечисления ("enum class") имеют базовый тип по умолчанию int.
Это отличается для языков, на которых вы отметили этот вопрос. В C и C ++ 03 базовый тип перечисления - , реализация определена .В C ++ 0x мы можем объявить собственный тип, называемый строго типизированными перечислениями (или классами перечислений):
// declares an enum with underlying type `unsigned char` enum class MyEnum : unsigned char {/*...*/};
В C и C ++ они целые.Приведение типов не изменит их ни малейшим образом, если вы не измените их на более узкий целочисленный тип (char, short).
В C # вы можете указать базовый тип, и если вы не укажете, то по умолчанию будет Int32.
Int32
public enum ThirtyTwoBitsWide { This, Is, The, Default, Size } public enum EightBitsWide : byte { Explicitly, Specify, The, Underlying, Size }