C++中enum和enum class的区别
- 1.作用域不同
- 2. 默认类型不同
- 3.类型安全程度不同
在C++中,enum和enum class都是用来定义枚举类型的关键字,但它们有几个区别。
1.作用域不同
enum的枚举成员的作用域在定义的枚举类型中是共享的,而enum class的每个枚举成员的作用域是独立的,需要通过枚举类型作用域限定符进行访问。
enum Color {RED,BLUE
};enum class Size {SMALL,MEDIUM
};int main() {Color c = RED; // RED可以直接访问Size s = Size::SMALL; // 需要通过Size限定符访问SMALLreturn 0;
}
2. 默认类型不同
enum的底层类型是整型,编译器会自动根据枚举成员的数量选择合适的底层类型,而enum class的底层类型是强制指定的,可以是任何整型类型。
enum class Color : int {RED,BLUE
};
3.类型安全程度不同
enum class是类型安全的,不能将其值与其他类型进行比较或赋值。而enum不是类型安全的,可以与其他整型类型进行比较和赋值。
enum class Color {RED,BLUE
};enum Size {SMALL,MEDIUM
};int main() {Color c = Color::RED;//int n1 = c; // 错误,不能将enum class赋值给int类型//int n2 = Color::RED; // 错误,不能将enum class的值赋给int类型Size s = SMALL;int n3 = s; // 正确,可以将enum赋值给int类型return 0;
}