一、简介
enum
是一种数据类型,常用于定义一组命名常量。使用 enum
关键字可以将一组常量打包成一个集合,使得代码的可读性和可维护性大大提高。
以下是一个使用 enum
定义星期几的例子:
enum Weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
在这个例子中,Weekday
就是一个枚举类型,它包含了七个常量:MONDAY
、TUESDAY
、WEDNESDAY
、THURSDAY
、FRIDAY
、SATURDAY
和 SUNDAY
。它们可以在程序中被使用,例如:
#include <iostream>
using namespace std;
enum Weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
int main() {
Weekday day = MONDAY;
switch (day) {
case MONDAY:
cout << "Today is Monday" << endl;
break;
case TUESDAY:
cout << "Today is Tuesday" << endl;
break;
// ...
default:
cout << "Invalid day" << endl;
break;
}
return 0;
}
上面的程序会输出 “Today is Monday”,因为我们将 day
初始值设为 MONDAY
。
二、enum 常量的默认值
当我们声明一个枚举类型时,如果没有为其中的常量赋值,那么它们的默认值会从 0 开始自动递增。例如:
enum Numbers {
ONE,
TWO,
THREE
};
其中,ONE
的值为 0,TWO
的值为 1,THREE
的值为 2。
我们也可以手动为枚举常量赋值,这时未被赋值的常量会自动递增。例如:
enum Numbers {
ONE = 1,
TWO,
THREE
};
其中,ONE
的值为 1,TWO
的值为 2,THREE
的值为 3。
三、enum 的作用范围
在 C++ 中,枚举类型是一种本地类型,它们的作用域是在它们被定义的命名空间中。例如,在函数内部定义的枚举类型只能在该函数内部访问。 如下例子所示:
#include <iostream>
using namespace std;
void foo() {
enum Fruit {
APPLE,
ORANGE,
BANANA
};
Fruit myFruit = APPLE;
cout << "My fruit is: " << myFruit << endl;
}
int main() {
foo();
// This will produce an error, myFruit is out of scope
// Fruit myFruit = APPLE;
return 0;
}
在函数 foo()
内部定义的 Fruit
类型只能在函数内部访问。在函数外部定义的 myFruit
变量使用会导致编译错误。
四、enum 的可读性
使用 enum
类型可以增强代码的可读性和可维护性,因为使用枚举常量可以代替直接使用数字。
例如,下面的代码可能会让读者感到困惑:
int result = someFunction();
if (result == 0) {
// Do something
} else if (result == 1) {
// Do something else
} else if (result == 2) {
// Do another thing
} else if (result == 3) {
// Do yet another thing
} else {
// Handle invalid result
}
我们可以使用枚举类型:
enum Result {
SUCCESS,
ERROR1,
ERROR2,
ERROR3
};
Result result = someFunction();
if (result == SUCCESS) {
// Do something
} else if (result == ERROR1) {
// Do something else
} else if (result == ERROR2) {
// Do another thing
} else if (result == ERROR3) {
// Do yet another thing
} else {
// Handle invalid result
}
这种使用方式可以让代码更加易读、易维护。
五、enum 和 switch
在 C++ 中,switch
语句可以使用枚举类型。例如:
enum Color {
RED,
GREEN,
BLUE
};
int main() {
Color color = RED;
switch (color) {
case RED:
cout << "Color is red" << endl;
break;
case GREEN:
cout << "Color is green" << endl;
break;
case BLUE:
cout << "Color is blue" << endl;
break;
default:
cout << "Invalid color" << endl;
break;
}
return 0;
}
上述代码会输出 “Color is red”。
结论
使用 enum
类型可以为程序提供更好的可读性和可维护性。编程人员可以使用 enum
类型为常量赋予有意义的标识符,并避免使用未知含义的数字。