廊坊网站专业制作做阿里巴巴网站需要哪些资料
文章目录
- C++ enum 和 enum class
 - 共同点
 - 区别
 
C++ enum 和 enum class
在C++中, enum 是一种定义枚举类型的方法。 一个枚举是一个整数值的命名集合。 可以通过以下方式创建一个枚举类型:
enum Color {RED,GREEN,BLUE
};
 
这里我们定义了一个名为 Color 的枚举类型,并包括三个命名值: RED , GREEN 和 BLUE 。 在默认情况下,第一个名称的值是0,后续名称的值将递增。
我们可以使用此枚举类型来定义变量:
Color myColor = RED;
 
我们也可以直接访问枚举中的某个值(注意:这不是枚举的类型):
int value = GREEN;
 
在 enum 中,虽然命名值在同一个命名空间(namespace)中,但它们的作用域是全局的。
另一方面,enum class 是C++11引入的新特性。与传统的枚举类型相比,enum class 具有更严格的类型检查和更高的安全性。 在 enum class 中,命名值不再具有全局作用域。 这是 enum 和 enum class 的一个主要区别。
我们可以使用以下方式创建一个 enum class:
enum class Color2 {RED,GREEN,BLUE
};
 
这里我们定义了一个名为 Color2 的 enum class,并包括三个命名值: RED, GREEN, 和 BLUE 。 请注意,在 enum class 中,命名值是在类型范围内定义的。 因此,我们将命名值作为 Color2::RED 等限定符使用。
我们可以使用下面的语句定义变量:
Color2 myColor2 = Color2::RED;
 
我们也可以直接访问枚举中的某个值:
int value = static_cast<int>(Color2::GREEN);
 
在 enum class 中,命名值的作用域仅限于该 enum class。 这意味着我们不能在不使用限定符的情况下直接引用命名值。
共同点
enum和enum class都是定义枚举类型的方法。
区别
- 在默认情况下,
enum是基于int类型的;而enum class明确指定了底层类型(默认为int)。 - 在 
enum中,命名值在全局范围内具有作用域。 但在enum class中,命名值的作用域限制在enum class内部。 enum命名值之间可以进行赋值、比较等操作,而在enum class中,只有类型相同的枚举值才能进行此类操作。enum与普通的整型值之间可以交换转换,但是很容易出现类型不匹配等问题。 而在将enum class值与整数值进行比较之前,需要先进行强制类型转换。
