枚举
枚举是C++中的一种基本数据类型,用于定义一组具有离散值的常量,它
以让数据更简洁,更易读。枚举是将一组整形常量组织在一起,所以和类的使用方法有一些类似之处。实际中经常使用枚举来做数据的标识,可以实现对数据的分类,类似于用Ture和False区分是与非,而枚举也可以在此基础上也用整形常量的方式对数据进行更多的分类。不论是哪种形式的枚举,它们都定义了一种独特的数据类型,可以用来创建变量,这些变量只能取预先定义好的枚举成员之一作为值。
1强枚举类型和弱枚举类型
C++中枚举类型分为弱枚举类型和强枚举类型,不论是哪种形式的枚举,它们都定义了一种独特的数据类型,可以用来创建变量,这些变量只能取预先定义好的枚举成员之一作为值。
弱枚举类型(Weak Enumerations),即使用enum关键字定义的传统枚举,其特点如下:
①全局作用域:枚举成员处于定义它的作用域之外的全局作用域内,容易引起名称冲突。
②隐式类型转换:枚举值可以隐式转换为整数,也可以和其他枚举类型进行比较,这可能导致意料之外的行为和错误。
③较少的类型控制:没有强制要求枚举值的类型,这降低了类型的安全性。
语法:enum 枚举类型名 {枚举成员1, 枚举成员2, …}
#include<iostream>
using namespace std;
// 限定作用域的枚举类型
enum Season {
Spring,
Summer,
Autumn,
Winter
};
enum class MySeason {
// 与枚举类型Season中的变量冲突,无法定义变量
//Spring,
//Summer,
//Autumn,
//Winter
};
int main() {
// 使用枚举值
Season currentSeason = Season::Spring;
std::cout << "The integer value of current Season is: " << currentSeason << std::endl;
return 0;
}
强枚举类型(Strongly Typed Enumerations)是C++11引入的一种枚举类型,也称为enum class
。与传统的枚举类型(通常称为弱枚举类型或无类型枚举、非类型安全枚举)相比,强枚举类型具有以下特点:
①作用域限制:强枚举类型的枚举成员被限定在其定义的作用域内,不会污染全局命名空间,减少了命名冲突的可能性。
②类型安全:强枚举类型的值不会自动转换为整数或其他枚举类型,避免了无意中的类型混淆和错误的算术运算,增强了类型安全性。
③明确的类型名称:使用强枚举类型时,必须明确指定枚举类型名称,例如EnumType::EnumMember
,这增加了代码的可读性和自我文档化性质。
语法:enum class 枚举类型名 {枚举成员1, 枚举成员2, …}
#include<iostream>
using namespace std;
// 不限定作用域的枚举类型
enum class Season {
Spring,
Summer,
Autumn,
Winter
};
enum class MySeason {
Spring,
Summer,
Autumn,
Winter
};
int main() {
// 使用枚举值
Season currentSeason = Season::Spring;
MySeason mycurrentSeason = MySeason::Summer;
// 注意:不能直接将enum class的值隐式转换为整数输出
// 若要输出枚举值对应的整数,需要使用static_cast
int currentSeasonValue = static_cast<int>(currentSeason);
int mycurrentSeasonValue = static_cast<int>(mycurrentSeason);
std::cout << "The integer value of current season is: " << currentSeasonValue << std::endl;
std::cout << "The integer value of my current season is: " << mycurrentSeasonValue << std::endl;
return 0;
}