2016-07-10 101 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個字節中就沒有關係。