十堰建设局网站,电脑技术学习网站,医疗网站建设计划书,中国电力建设企业协会网站文章目录 C enum 和 enum class共同点区别 C enum 和 enum class
在C中#xff0c; enum 是一种定义枚举类型的方法。 一个枚举是一个整数值的命名集合。 可以通过以下方式创建一个枚举类型#xff1a;
enum Color {RED,GREEN,BLUE
};这里我们定义了一个名为 Color 的枚举类… 文章目录 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 是C11引入的新特性。与传统的枚举类型相比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_castint(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 值与整数值进行比较之前需要先进行强制类型转换。