枚举量冲突

两个枚举定义中的枚举量可能发生冲突。比如有两个枚举定义:

enum egg {Small, Medium, Large, Jumbo};
enum t_shirt { Small, Medium, Large, XLarge};

这将没有办法通过编译,因为egg Small和 t_shirt Small位于相同的作用域内,将发生冲突。为了避免这个问题,C++11提供了一种新枚举,其枚举量的作用域为类。这种枚举的声明类似于下面这样:

enum class egg {Small, Medium, Large, Jumbo};
enum class t_shirt { Small, Medium, Large, XLarge};

也可以用关键字struct代替class:

enum struct egg {Small, Medium, Large, Jumbo};
enum struct t_shirt { Small, Medium, Large, XLarge};

枚举量的作用域变为类后,不同枚举定义中的枚举量就不会发生名称冲突了。

但是有一点要注意,在一些情况下,常规枚举类型将自动转换成整数,比如将其赋值给int变量或用于比较表达式时,但作用域内枚举不能隐式地转换为整数。但在必要地时候,可以进行显示类型转换。

int Frodo = int(t_shirt::Small)

你可能感兴趣的:(C++)