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

Ada*_*tin 4 c++ enums static-cast c++11

我有一个键入的枚举

enum side : int {_white=0,
                 _yellow=1,
                 _green=2,
                 _blue=3,
                 _red=4,
                 _orange=5};
Run Code Online (Sandbox Code Playgroud)

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

side value
function(static_cast<int *>(&value))
Run Code Online (Sandbox Code Playgroud)

这是为什么?做static_cast<int>(value))不会引起任何错误.

Zan*_*ynx 5

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

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