C++ C++;11将枚举强制转换为整数

C++ C++;11将枚举强制转换为整数,c++,c++11,enums,static-cast,C++,C++11,Enums,Static Cast,我有一个类型化的枚举 enum side : int {_white=0, _yellow=1, _green=2, _blue=3, _red=4, _orange=5}; 但是,使用gcc-5,编译器表示在以下场景中无法使用静态_cast: side value function(static_cast<int *&

我有一个类型化的枚举

enum side : int {_white=0,
                 _yellow=1,
                 _green=2,
                 _blue=3,
                 _red=4,
                 _orange=5};
但是,使用gcc-5,编译器表示在以下场景中无法使用静态_cast:

side value
function(static_cast<int *>(&value))
边值
函数(静态类型和值))

为什么呢?执行
static_cast(value))
不会引发任何错误

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


但是,类型转换是安全的,因为它将枚举转换为int作为副本。原始枚举可以是一个单字节或两个字节,但复制成4或8字节后,这并不重要。

不同的类型,您是否应该使用
reinpterpret\u cast
?您可以将布尔值转换为双字节值,但这并不意味着bool指针可以被有意义地视为双指针。我还以为类型化枚举本质上是相同的数据类型呢?由于它被键入为
int
,编译器应该能够接受
静态\u cast
否?显然,使用
reinterpret\u cast
是可行的,但它有一点代码味道。是的,它是一种代码味道,但可以说你试图做一些有味道的事情。使用
int*y
,您可以执行
*y=44
。对于
侧*y
,您不是。您正在移除安全网。@zneak。。。仔细想想,它很臭,很有道理。我认为你的命令和Kerrek的命令相结合是一个答案,我并没有真的想透界限。不过,我不太清楚如何在我个人的情况下消除我的代码味道,可能不得不坚持使用重新解释的类型转换,因为我更喜欢使用一百万个静态类型转换。