Могу ли я определить размер перечисления в С++?

Из того, что я знаю (из того, что я прочитал на языке программирования cpp), размер будет иметь размер "некоторого целочисленного типа, который может удерживать свой диапазон и не больше sizeof (int), если перечислитель не может быть представленный как int или как unsigned int".

Но можно ли каким-то образом определить размер? Например, я хотел бы использовать перечисление, sizeof которого является размером естественного слова (обычно без знака long).

Ответ 1

Вы можете в С++ 11:

enum /*class*/ MyEnum : unsigned long
{
    Val1,
    Val2
};

(Вы можете указать размер перечисления либо для старого стиля enum, либо для нового стиля enum class.)

Вы также можете увеличить минимальный размер перечисления путем забавного обмана, воспользовавшись последней фразой предложения, которое вы указали:

enum MyEnum
{
    Val1,
    Val2,
    ForceSize = 0xFFFFFFFF // do not use
};

..., который гарантирует, что перечисление не менее 32 бит.

Ответ 2

В С++ 11 вы можете использовать класс enum, где вы можете указать базовый тип. В С++ 03 нет решения.