既然有了新的特性,那么就说明之前老的存在问题,我们就先来总结一下老的存在什么问题:
1、在之前的enum中,数据类型被默认的转换成了int,如果你并不想让它成为int时将会很难办!
2、之前的enum中的变量的可见范围,是包含enum声明的整个作用域,这样很容易造成变量命名的冲突。
3、之前的enum不能指定变量的数据类型,不能支持前置声明。
看到上面提到的这些问题之后,我们也不难想象新的enum的特性了:
1、你可以在声明的时候的指定变量的数据类型,而不仅仅支持int,但是该类型必须是能跟整形兼容的类型,例如:short、long、long long等,如果不显式的指定默认为int:
点击(此处)折叠或打开
- enum EE : unsigned long { EE1 = 1, EE2 = 2, EEbig = 0xFFFFFFF0U };
点击(此处)折叠或打开
-
enum class color : int;
-
void print(color x);
-
-
enum class color
-
: int{
-
red,
-
blue,
-
white
-
};
-
-
void print(color x)
-
{
-
if(x == color::red)
-
{
-
cout << "hello world" << endl;
-
}
-
}
-
-
-
int main()
-
{
-
print(color::red);
-
return 0;
- }
点击(此处)折叠或打开
-
enum class Color { red, blue };
-
-
int a = red;//错误,red未声明
-
-
int b = enum::red;//错误,不能进行隐式类型转换
-
- int c = static_cast<int>(enum::red)//正确