如何将指针值强制转换为枚举

How to cast pointer value to enumeration?

本文关键字:转换 枚举 指针      更新时间:2023-10-16

>我有以下内容:

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 规范中没有看到任何声明枚举特殊行为的内容。

从 5.2.10/4 开始:"指针可以显式转换为任何足够大的整数类型来容纳它。枚举不是整数类型。

(第 5 段允许相反的方向:"整型或枚举类型的值可以显式转换为指针。