在reinterpret_cast
的条目中,cppref说:
成员,枚举,指针或指向成员的指针的表达式 type可以转换为自己的类型。结果值与expression的值相同。 (自C ++ 11起)
但是,无法编译以下代码(clang 5.0 with -std=c++1z
):
enum class A : int {};
int main()
{
A a{ 0 };
reinterpret_cast<int>(a); // error : reinterpret_cast from 'A' to 'int' is not allowed
}
为什么reinterpret_cast
不像C ++标准那样表现?
答案 0 :(得分:5)
a
的类型为A
,而不是int
。语法enum class A : int
使int
成为A
的基础类型,这是一种特殊关系,但不是“is-a”关系。
(static_cast
将执行此转换。)
答案 1 :(得分:3)
int
是“底层类型”,但枚举本身是一个单独的类型。
来自[dcl.enum] / 5:
每个枚举定义一个与所有其他类型不同的类型。每个枚举也有一个基础类型。可以使用enum-base明确指定基础类型。