2012-07-12 125 views
129

可能重複:
Generic way to cast int to enum in C++如何將int轉換爲C++中的枚舉?

如何我投一個int在C++枚舉?

例如:

enum Test 
{ 
    A, B 
}; 

int a = 1; 

如何轉換a的型式試驗::阿?

+84

我喜歡這個做一個谷歌搜索時,有負分,標記爲複製,但結果的最前面的事實「C++ int enum」 – Rickard 2013-11-18 14:29:28

+1

[link](http://www.enel.ucalgary.ca/People/Norman/enel315_winter1997/enum_types/) 注意int是否與枚舉類型的常量之一匹配並不重要;類型轉換總是非法的。 – Iwaz 2014-03-29 11:39:55

+6

如果這是一個重複,那麼爲什麼答案如此不同? – nobar 2015-02-10 22:54:39

回答

152
int i = 1; 
Test val = static_cast<Test>(i); 
+11

auto val = static_cast (i); // C++ 11 – Mitch 2016-09-30 17:58:37

+1

@Mitch我在這種情況下使用'auto'會得到什麼?有沒有任何性能改進? – 2017-05-19 03:29:31

+1

沒有性能改進。僅維護改進。 – Mitch 2017-06-12 15:26:42

50
Test e = static_cast<Test>(1); 
+0

MSDN:沒有運行時類型檢查有助於確保轉換的安全性(http://msdn.microsoft.com/zh-cn/library/c36yw7x9(v=vs.80).aspx)。 – 2012-07-12 13:43:36

+6

MSDN:static_cast運算符可以顯式地將整數值轉換爲枚舉類型。如果整型值不在枚舉值範圍內,則結果枚舉值是未定義的。 – 2012-07-12 13:56:15

+1

@KirillKobelev如果積分值可以由枚舉的基礎類型表示,那麼生成的枚舉必須具有該值。否則,生成的枚舉值將是將表達式轉換爲枚舉的基礎類型所得到的值。如果VC++做了一些不同的事情,我認爲這是不符合要求的。 – bames53 2012-07-12 17:09:12

13

您的代碼

enum Test 
{ 
    A, B 
} 

int a = 1; 

解決方案

Test castEnum = (Test)a; 
+34

這是一個不錯的主意,你可以使用最嚴格的強制轉換,並避免使用C風格強制轉換,從而爲編譯器提供檢測錯誤的最佳機會。'static_cast'在這裏會更好。 – 2012-07-12 13:57:37

+3

@Mike Seymour,問題在於在這種情況下靜態轉換與C-cast沒有區別。如何和它可以檢測到什麼錯誤? – 2012-07-13 00:19:00

+7

@KirillKobelev:問題是C風格的演員陣容不明確。它可以等同於'static_cast',但它也可以是'const_cast',甚至更糟糕,'reinterpret_cast'甚至是這些的組合。即使你現在知道它會降級什麼,假設你稍後將'a'改爲另一種類型,它可能是更改類型的轉換,而不會像警告那樣多,你不需要這樣做。 – KillianDS 2012-07-13 07:01:22