关键字:enum
声明枚举类型,然后可以用枚举类型来定义变量(如同结构体):
enum Color{white,black,yellow};
{注意分号}
Color color_type;
color_type 变量的值只限于枚举类型Color中的值
枚举类型中的元素称为:枚举元素或者枚举常量
也可以不用声明枚举类型名,直接定义枚举变量:
enum{white,black,yellow}color_type;
注意
1枚举常量是常量,不能在枚举常量列表之外的地方对枚举类型中的枚举常量赋值。
2:每一个枚举常量都代表一个整数,如果声明时没有给枚举常量赋值,则默认从0开始,往后逐渐加1。如果某个元素被指定值,往后的又逐渐加1.
eg:
enum num{n1,n2=4,n3,n4,n5=10,n6};
则:n1=0,n3=5,n4=6,n6=11 。
3:枚举元素不要重复,重复就没有意义了。
4,枚举类型如果在头文件的类中定义,在源文件作为函数返回类型时,必须用作用域运算符指定,否则就是未定义。
5,可以定义枚举类型的变量,也可以用枚举元素给变量赋值。(HTTP请求方法获取)
枚举虽然可以用在switch中,语法不会保错,但是因为枚举变量的值都是枚举类型,所以switch中的所有枚举选项尽管值不相等,但是类型相同,都会比较成功而被执行。
所以同一个枚举常量的值放在一个switch中比较毫无意义
enum class/struct{};
1,限定作用域,防止命令冲突;
2,防止隐式类型转换;
其实,不管限定作用域枚举还是不限定作用域枚举,甚至普通数据类型,只要成功匹配到目标结果,如果不退出,下面的结果都将匹配成功。
#include <iostream>
using namespace std;
enum class ELanguage {
kCHINESE,
kENGLISH,
kKOREAN
};
enum color {
whilte,
black,
gray
};
int main() {
switch (100) {
case 10:cout << 10 << endl;
case 100:cout << 100 << endl;
case 1000:cout << 1000 << endl;
default:
break;
}
ELanguage language = ELanguage::kCHINESE;
switch (language) {
case ELanguage::kCHINESE:
std::cout << "chninese" << std::endl;
case ELanguage::kENGLISH:
std::cout << "english" << std::endl;
case ELanguage::kKOREAN:
std::cout << "korean" << std::endl;
default:
break;
}
color c1 = whilte;
switch (c1) {
case whilte:
cout << "whilte=" << whilte << endl;
case black:
cout << "black=" << black << endl;
case gray:
cout << "gray=" << gray << endl;
default:
break;
}
return 0;
}