How to cast int to enum in C++?
C++CastingEnumsC++ 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
.