可能重複:
Generic way to cast int to enum in C++如何將int轉換爲C++中的枚舉?
如何我投一個int在C++枚舉?
例如:
enum Test
{
A, B
};
int a = 1;
如何轉換a
的型式試驗::阿?
可能重複:
Generic way to cast int to enum in C++如何將int轉換爲C++中的枚舉?
如何我投一個int在C++枚舉?
例如:
enum Test
{
A, B
};
int a = 1;
如何轉換a
的型式試驗::阿?
Test e = static_cast<Test>(1);
MSDN:沒有運行時類型檢查有助於確保轉換的安全性(http://msdn.microsoft.com/zh-cn/library/c36yw7x9(v=vs.80).aspx)。 – 2012-07-12 13:43:36
MSDN:static_cast運算符可以顯式地將整數值轉換爲枚舉類型。如果整型值不在枚舉值範圍內,則結果枚舉值是未定義的。 – 2012-07-12 13:56:15
@KirillKobelev如果積分值可以由枚舉的基礎類型表示,那麼生成的枚舉必須具有該值。否則,生成的枚舉值將是將表達式轉換爲枚舉的基礎類型所得到的值。如果VC++做了一些不同的事情,我認爲這是不符合要求的。 – bames53 2012-07-12 17:09:12
您的代碼
enum Test
{
A, B
}
int a = 1;
解決方案
Test castEnum = (Test)a;
這是一個不錯的主意,你可以使用最嚴格的強制轉換,並避免使用C風格強制轉換,從而爲編譯器提供檢測錯誤的最佳機會。'static_cast'在這裏會更好。 – 2012-07-12 13:57:37
@Mike Seymour,問題在於在這種情況下靜態轉換與C-cast沒有區別。如何和它可以檢測到什麼錯誤? – 2012-07-13 00:19:00
@KirillKobelev:問題是C風格的演員陣容不明確。它可以等同於'static_cast',但它也可以是'const_cast',甚至更糟糕,'reinterpret_cast'甚至是這些的組合。即使你現在知道它會降級什麼,假設你稍後將'a'改爲另一種類型,它可能是更改類型的轉換,而不會像警告那樣多,你不需要這樣做。 – KillianDS 2012-07-13 07:01:22
我喜歡這個做一個谷歌搜索時,有負分,標記爲複製,但結果的最前面的事實「C++ int enum」 – Rickard 2013-11-18 14:29:28
[link](http://www.enel.ucalgary.ca/People/Norman/enel315_winter1997/enum_types/) 注意int是否與枚舉類型的常量之一匹配並不重要;類型轉換總是非法的。 – Iwaz 2014-03-29 11:39:55
如果這是一個重複,那麼爲什麼答案如此不同? – nobar 2015-02-10 22:54:39