How to cast int to enum in C++?

前端 未结 5 2194
旧巷少年郎
旧巷少年郎 2020-12-12 17:49

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

相关标签:
5条回答
  • 2020-12-12 18:13
    int i = 1;
    Test val = static_cast<Test>(i);
    
    0 讨论(0)
  • 2020-12-12 18:14

    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.

    0 讨论(0)
  • 2020-12-12 18:19
    Test e = static_cast<Test>(1);
    
    0 讨论(0)
  • 2020-12-12 18:27

    Your code

    enum Test
    {
        A, B
    }
    
    int a = 1;
    

    Solution

    Test castEnum = static_cast<Test>(a);
    
    0 讨论(0)
  • 2020-12-12 18:27

    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 just this seems to be a popular question nobody else seems to have 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);
    
    0 讨论(0)
提交回复
热议问题