C++11作用域内枚举enum

在C++11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的。如果还不知道C++中枚举(enum)是什么,可以看这篇:枚举enum

如:苹果和桔子都有大,中,小。写个代码来说明下:

以上代码编译不会通过的,因为apple和orange在同一个作用域内。之前我们可能会改成用size来做枚举,但apple枚举又多了一个枚举值,这样在C++11之前版本中就不会很好处理。

哪C++11是如何处理这类问题?

C++11提供一种新枚举(enum),其枚举量的作用域为类。

具体声明如下:

声明中的class关键字,也可以用struct。

这样枚举的作用域为类后,不同枚举(enum)定义中的枚举量就不会有名称冲突

如何使用作用域内枚举?

使用枚举名来限定枚举量,这样编译器才会明白用哪个的枚举量。

C++11作用域内枚举不能默认隐式转换成int

上面代码可以看出C++11代码会更加安全,如一定要转换,必需显示类型转换。

为什么不能直接转换具体原因?

C++98中,枚举类的具体值类型是什么,可能随系统而异,没有硬规定。但一般都会是int类型。

C++11中,枚举类的具体值类型不在依赖系统,可以自己定义。如不指定,默认C++11作用域内枚举的值类型是int。

如何指定C++11作用域内枚举的值类型?

指定枚举值类型定义语法: