C++ enum
1. enum语法
enum Color
{
white = 0,
blue,
red
} color;
//int white = 3;
上述代码定义了一个枚举类型Color,三个枚举量white,blue,red以及一个枚举变量color
其中三个枚举量的值分别为:0,1,2
对color可以进行赋值操作,将枚举量赋给color,比如color = blue;此时cout打印color值为1
但是不允许把其他类型的值赋给color,比如color = 1非法
2. enum class介绍
如果在枚举的定义后再加上一行int white = 3; 编译器会认为对white重复定义,无法通过。这时可以用enum class来避免这种情况:
enum class Color
{
white = 0,
blue,
red
} color;
int white = 3;
经过上述定义后,white代表一个int值,初始为值3,而枚举量white的定义域被限定在大括号内,只能使用Color::white来访问它
这种做法可以避免枚举量“污染”正常的命名,还能赋予枚举量更清晰的意义,比如使用Color::white就能知道white代表颜色。
因此,要使用枚举的时候尽量采用enum claas来定义
3. enum 与 tuple
传统的enum还有一个用处。由于使用enum class后,不允许对枚举量进行隐式类型转换,但使用enum可以,所以在对元组tuple进行get操作的时候,可以使用由enum定义的枚举量。如:
enum Info
{
uName = 0,
uEmail,
uID
};
tuple<string, string, int> t;
t = make_tuple("Fish", "15826", 1);
auto x = get<uName>(t); //x为"Fish"
此时get<uName>(t) 等同于get<0>(t),即获取元组的第一个元素,并且前者更具有可读性。
Ps: 如果Info是一个enum class,就不可以这么用,除非使用强制类型转化get<(size_t)Info::uNAME>(t)