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

C++11 Casting enums to ints

我有一个类型枚举

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)) 不会引发任何错误。

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

虽然类型转换是安全的,因为它将枚举转换为 int 作为副本。原始枚举可以是单个字节或两个字节,但一旦将其复制为 4 或 8 个字节就没关系了。