views:

418

answers:

6

This may have been answered elsewhere but I could not find a suitable response.

I have this code:

enum enumWizardPage
{
    WP_NONE = 0x00,  
    WP_CMDID = 0x01, 
    WP_LEAGUES = 0x02, 
    WP_TEAMS = 0x04, 
    WP_COMP = 0x08, 
    WP_DIVISIONS = 0x10,
    WP_FORMULAS = 0x20, 
    WP_FINISHED = 0x40, 
};

Which is legacy and I have to modify it by adding a few new values. The issue is each value must be a unique bit so they may be OR combined to a bitmap.

The values are set using the #x## hex format, but I'm wondering if this is the max it can store? What will be the effect, if any, if I change my code to

enum enumWizardPage
{
    WP_NONE = 0x0000,  
    WP_CMDID = 0x0001, 
    WP_LEAGUES = 0x0002, 
    WP_TEAMS = 0x0004, 
    WP_COMP = 0x0008, 
    WP_DIVISIONS = 0x0010,
    WP_FORMULAS = 0x0020, 
    WP_FINISHED = 0x0040, 
};
+4  A: 

The type of a C++ enum is the enum itself. Its range is rather arbitrary, but in practical terms, it's an int.

It is implicitly cast to int wherever it's used, though.

greyfade
+11  A: 

From Standard C++ 7.2/5:

The underlying type of an enumeration is an integral type that can represent all the enumerator values defined in the enumeration. It is implementation-defined which integral type is used as the underlying type for an enumeration except that the underlying type shall not be larger than int unless the value of an enu- merator cannot fit in an int or unsigned int. If the enumerator-list is empty, the underlying type is as if the enumeration had a single enumerator with value 0. The value of sizeof() applied to an enu- meration type, an object of enumeration type, or an enumerator, is the value of sizeof() applied to the underlying type.

Kirill V. Lyadvinsky
+1  A: 

By default, enums are int.

You can change the underlying type of an enum though.

Matt Bridges
In an implementation specific way.
EFraim
A: 

IIRC its represented as int in memory. But gcc has switch -fshort-enum to make it a shortest integer type that fits all the values, if you need to save space. Other compilers will have something similar.

cube
A: 

The underlying type is the smallest signed integer fitting the biggest/smallest value of your enum.

dimba
A: 

It is the enum itself! But in practice, it is translated into an int (IIRC you can change the type it is translated to)

Gab Royer