2016-07-10 104 views
4

我有一个类型化的枚举C++ 11铸造枚举到整数

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

+2

不同类型,你不应该使用'reinpterpret_cast'? –

+5

您可以将bool转换为double,但这并不意味着bool指针可以被有意义地视为双指针。 –

+0

我以为一个枚举枚举实质上是相同的数据类型,但?由于它被键入为“int”,编译器应该能够接受'static_cast'否?显然使用'reinterpret_cast'的作品,但它有点代码味道。 –

回答

5

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

尽管类型转换是安全的,因为它将enum转换为一个int作为副本。最初的枚举可以是一个字节或两个字节,但是一旦它复制到4或8个字节中就没有关系。