C ++ 11将枚举转换为整数

时间:2016-07-10 19:44:47

标签: c++ c++11 enums static-cast

我有一个输入的枚举

enum side : int {_white=0,
                 _yellow=1,
                 _green=2,
                 _blue=3,
                 _red=4,
                 _orange=5};

但是,使用gcc-5,编译器说它在以下场景中不能使用static_cast:

side value
function(static_cast<int *>(&value))

为什么?执行static_cast<int>(value))不会引发任何错误。

1 个答案:

答案 0 :(得分:5)

指针类型转换不仅仅是类型转换。通过指针访问会使字节相同但以不同方式读取它们。这对于枚举来说是安全的,因为它可以是不同大小的int。

类型转换是安全的,因为它将枚举转换为int作为副本。原始枚举可以是单个字节或两个字节,但一旦复制到4或8个字节就无关紧要。