可能重复:
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