C/C++枚举类型:
不限定作用域的枚举类型
关键字: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中的所有枚举选项尽管值不相等,但是类型相同,都会比较成功而被执行。
所以同一个枚举常量的值放在一个switch中比较毫无意义
限定作用域的枚举类型
enum class/struct{};
链接
作用:
1,限定作用域,防止命令冲突;
2,防止隐式类型转换;
switch语法
其实,不管限定作用域枚举还是不限定作用域枚举,甚至普通数据类型,只要成功匹配到目标结果,如果不退出,下面的结果都将匹配成功。
#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;
}