如何将指针值转换为枚举?

时间:2015-01-23 00:29:57

标签: c++ c++11

我有以下内容:

enum TestEnum { One=1, Two, Three };

int main()
{
    char const* data = reinterpret_cast<char const*>(One);

    TestEnum e = reinterpret_cast<TestEnum>(data);
}

Clang无法编译:

main.cpp:11:18: error: reinterpret_cast from 'const char *' to 'TestEnum' is not allowed
    TestEnum e = reinterpret_cast<TestEnum>(data);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

为什么reinterpret_cast不能在这种情况下工作?我已经尝试删除const,但这没有任何区别。我没有在C ++ 11规范中看到任何声明枚举特殊行为的内容。

1 个答案:

答案 0 :(得分:2)

从5.2.10 / 4开始:&#34;指针可以显式转换为足以容纳它的任何整数类型。&#34;枚举不是完整的类型。

(第5段允许反方向:&#34;整数类型或枚举类型的值可以显式转换为指针。&#34;)