首页新闻动态正文

C++学习9:枚举enum【黑马web前端】

更新时间:2019年07月26日 13时51分29秒 来源:黑马程序员论坛

enum是一种创建符号常量的方式,可用于替代const。

1. 定义:

默认情况下,enum定义的枚举量会成为符号常量,对应从0开始的整数,从左到右依次+1。
例如:

enum color{red, orange, yellow, green, blue, violet, black};
1
color是枚举名,是一种新类型,red、orange、yellow等是枚举量,都是符号常量,对应0~7的整数。

可以使用赋值运算符来设置枚举量的值,枚举量可以相等,左侧不一定大于右侧。而没有被设置的枚举量等于前一个枚举量+1。
例如:

    enum color{red = 1, orange, yellow=1 , green, blue, violet= 11, black};
    cout<< red <<endl
        << orange <<endl
        << yellow <<endl
        << green <<endl
        << blue <<endl
        << violet <<endl
        << black <<endl;
    system("pause");

结果为


请按任意键继续. . .

在c++早期版本中,只能将int值赋给枚举量,但后来取消了该限制,可以使用long、long long类型的值赋值。

2、枚举变量:

枚举名+变量名,定义枚举变量。
例如:

color c;

color c为枚举变量,其取值为枚举量中的一个。

枚举变量不是int型,不能直接赋int值,可以使用枚举量赋值。
例如:

c = 3;  //错误,不可以使用int赋值。
c = red;  //正确
c = color(13);  //正确,color(3)对int值进行了强制类型转换。
c = red + green;  //错误,red和green相加会转换位int值。

这里单独说下第三种情况,如果强制类型转换的int值不在枚举范围内,结果是不确定的,这样做不会出错,但不能依赖得到的结果。下面的第三部分会说明枚举的取值范围。

枚举变量可以直接相互赋值。
例如:

    color a;
    color c;
    c = a;

3、取值范围:

按照定义来说,枚举应该是在声明中具有的那些值才有效,但c++通过强制类型转换增加了其取值范围。
每个枚举都有其取值范围,在取值范围内的任意整数,无论是不是枚举量,都可以赋给枚举变量。
例如:

enum color{red = 1, orange, yellow=1 , green, blue, violet= 11, black};
color c;
c = color(13);  


由第一部分我们知道,枚举量中不包含13,而13实际是在取值范围内的,因此赋值是正确的。下面来看如何确定取值范围。

取值范围由枚举上下限确定,上限为大于最大枚举量的最小2的幂减1,下限分两种情况:如果枚举量都不小于0,则下限为0,否则同上限,不过要加个负号。
例如一个枚举的最大枚举量为98,最小枚举量为-5,则其上限为128-1=127,下限为-(8-1)=-7。

这个取值范围是在正确使用时才会保证有效的,下面来看一个特殊例子:

    enum color{red = 1, orange, yellow=1 , green, blue, violet= 11, black};
    color a;
    a = color(120);
    cout<< a <<endl;

结果如下:

120
请按任意键继续. . .

根据刚才的理论,color最大枚举量为12,,取值范围应该为[0,15]。120已经超出了范围,却没有报错。在CSDN论坛里有很不错的解释:http://bbs.csdn.net/topics/390808288
原因在于,这里使用了强制类型转换,破坏了检测机制。编译器是不对强制转换带来的错误进行评估的,因此没有报错。因此这种错误只能由程序员自己负责。

4、与const的区别:

1、enum可以定义新类型,而const是修饰符,无法定义新类型。比如上面的color a。
2、enum只能指定整型常量,而const可以指定任意类型常量。比如const double PI = 3.14159。
3、试图修改const定义的变量时,编译器会报错。而枚举变量的值是可以修改的。

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!