为什么`reinterpret_cast`不像C ++标准那样表现?

时间:2017-03-25 04:17:25

标签: c++ c++11 casting type-conversion standards

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 ++标准那样表现?

2 个答案:

答案 0 :(得分:5)

a的类型为A,而不是int。语法enum class A : int使int成为A基础类型,这是一种特殊关系,但不是“is-a”关系。

static_cast将执行此转换。)

答案 1 :(得分:3)

int是“底层类型”,但枚举本身是一个单独的类型。

来自[dcl.enum] / 5:

  

每个枚举定义一个与所有其他类型不同的类型。每个枚举也有一个基础类型。可以使用enum-base明确指定基础类型。