How to cast int to enum in C++?

C++CastingEnums

C++ Problem Overview


How do I cast an int to an enum in C++?

For example:

enum Test
{
    A, B
};

int a = 1;

How do I convert a to type Test::A?

C++ Solutions


Solution 1 - C++

int i = 1;
Test val = static_cast<Test>(i);

Solution 2 - C++

Test e = static_cast<Test>(1);

Solution 3 - C++

Your code

enum Test
{
    A, B
}

int a = 1;

Solution

Test castEnum = static_cast<Test>(a);

Solution 4 - C++

Spinning off the closing question, "how do I convert a to type Test::A" rather than being rigid about the requirement to have a cast in there, and answering several years late only because this seems to be a popular question and nobody else has mentioned the alternative, per the C++11 standard:

> 5.2.9 Static cast > > ... an expression e can be explicitly converted to a type T > using a static_cast of the form static_cast<T>(e) if the declaration > T t(e); is well-formed, for some invented temporary variable t (8.5). > The effect of such an explicit conversion is the same as performing > the declaration and initialization and then using the temporary > variable as the result of the conversion.

Therefore directly using the form t(e) will also work, and you might prefer it for neatness:

auto result = Test(a);

Solution 5 - C++

Test castEnum = static_cast<Test>(a-1); will cast a to A. If you don't want to substruct 1, you can redefine the enum:

enum Test
{
    A:1, B
};

In this case Test castEnum = static_cast<Test>(a); could be used to cast a to A.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1509260View Question on Stackoverflow
Solution 1 - C++AndrewView Answer on Stackoverflow
Solution 2 - C++bames53View Answer on Stackoverflow
Solution 3 - C++user1515687View Answer on Stackoverflow
Solution 4 - C++TommyView Answer on Stackoverflow
Solution 5 - C++kosolapyjView Answer on Stackoverflow