C++的enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。它还允许定义新类型,但必须按照严格的限制进行。使用enum的句法与使用结构相似。例:

enum spectrum{red,orange,yellow,green,blue,violet,indigo,ultraviolet};
#这条语句完成了两项工作#1.让spectrum成为新类型的名称;spectrum被称为枚举(enumeration),就像struct被称为结构体一样。#2.将red、orange、yellow等作为符号常量,它们对应的数值0~7.这些常量叫做枚举量。

在默认情况下,将整数值赋给枚举量,第一个枚举量的值是0,第二个是1,依此类推,可以通过显式地指定整数值来覆盖默认值。

可以用枚举名来声明这种类型的变量:

spectrum band; // band a variable of type spectrum

在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量。例:

band=blue; // vaild,blue is an enumerator
band=2000;//invaile,2000 not an enumerator

对于枚举,只定义了赋值运算符,没有为枚举定义算术运算:

band=orange;   // valid
++band;        // not vaild
band=orange+red; //not vaild,but a little tricky

枚举量是整型,可被提升为Int类型,但int类型不能自动转换为枚举类型:

int color =blue; // vaild,spectrum type promoted to int
band=3; //invaild,int not convered to spectrum
color =3+red;  //vaild,red converted to int
  1. 设置枚举量的值

可以使用赋值运算符来显式地设置枚举量的值:

enum bits{one=1,two=2,four=4,eight=8};
#指定的值必须是整数。也可以只显式地定义其中一些枚举量的值:
enum bigstep{first,second=100,third}; //first在默认情况下为0,后面没有被初始化的枚举量的值将比前面的枚举量大1.因此third的值为【0】(上取整0)
##可以创建多个值相同的枚举量:
enum{zero,null=0,one,numero_uno=1}; //其中zero和null都为0,one和numero_uno都为1.

2.枚举的取值范围

每个枚举都有取值范围,通过强制类型转换,可以将取值范围中的任何整数值赋给枚举量,即使这个值不是枚举值。

#设bits和myflag的定义如下:
enum bits{one =1,two=2,four=4,eight=8};
bits myflag;
myflag =bits(6)  //vaild,because 6 is in bits range 其中6不是枚举值,但它位于枚举定义的取值范围内。

取值范围的定义:

首先,要找出上限,需要知道枚举量的最大值。找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。要计算下限,需要知道枚举量的最小值。如果它不小于0,则取值范围的下限为0;否则,采用与寻找上限方式相同,但加上负号。

C++Primer之4.6枚举读书笔记相关推荐

  1. C++Primer PLus 第五版读书笔记

    处理第一个问题: 1)某书店以文件形式保存其每一笔交易.没一笔交易记录某本书的销售情况,含有ISBM.销售册数和销售单 价.每一笔交易形如:0-201-70352-X 4 24.99 -------- ...

  2. C Primer Plus (第6版) 读书笔记_Chapter 1

    第 1 章 初识 C 语言 ■ C 的历史和特性 ■ 编写程序的步骤 ■ 编译器和链接器的一些知识 ■ C 标准 1.1  C 语言的起源   1972年,贝尔实验室的 丹尼斯 • 里奇(Dennis ...

  3. C Primer Plus (第6版) 读书笔记_Chapter 2

    本章介绍以下内容: ■ 运算符:= ■ 函数:main().printf() ■ 编写一个简单的 C 程序 ■ 创建整型变量,为其赋值并在屏幕上显示其值 ■ 换行符 ■ 如何在程序中写注释,创建包含多 ...

  4. C++ 操作重载与类型转换 《C++Primer》第14章 读书笔记

    本章内容一览: 1.基本概念 和 限制条件 只有重载的函数调用运算符operator()能有默认实参,其他重载运算符不能有默认实参. 一个重载的运算符,至少含有一个类类型的参数. 可被重载的运算符: ...

  5. C++ Primer 第三版 读书笔记

    1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0.如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0 2.一般定义指针最好写成:" string * ...

  6. C++ Primer读书笔记(从后向前看)

    (从后向前看) 标题:重载函数再论 重载函数是C++提出来的概念,但是在C中却未必没有.比如"1+3"和"1.0+3.0",虽然都是加法,做的却不是同的操作:编 ...

  7. c++primer读书笔记

    c++全局变量无声明.多次定义会冲突.利用命名空间 c++四种cast操作符的区别 1.static_cast,支持子类指针到父类指针的转换,并根据实际情况调整指针的值,反过来也支持,但会给出编译警告 ...

  8. 读书笔记之C Primer Plus 1

    为什么阅读<C Primer Plus>第六版 准备好好研究下redis源码,但是很久没用c语言写代码了,平时工作主要用java和js. 所以准备重新阅读学习下c语言经典书籍:C Prim ...

  9. C++ Primer读书笔记

    (从后向前看) 标题:重载函数再论 重载函数是C++提出来的概念,但是在C中却未必没有.比如"1+3"和"1.0+3.0",虽然都是加法,做的却不是同的操作:编 ...

最新文章

  1. 自控力极差的人如何自救?两个方法战胜拖延!
  2. “2018中国AI英雄风云榜”年度人物榜:“AI天才”何恺明
  3. Bootstrap File Input 真正 解决跨域问题
  4. jni java共享变量_JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量 .
  5. Intellij IDEA 导入或运行流式处理框架storm以及java.lang.NoClassDefFoundError报错的解决方案
  6. oracle导数据不释放内存,关于ORACLE数据库delete后释放空间问题
  7. 如何监控oracle的索引是否使用
  8. mysql int类型为null_MySQL INT类型可以为非零NULL吗?
  9. 京东智联云张晓东cdn_京东智联云:数智力量驱动实体经济复苏
  10. Promise.then(a, b)与Promise.then(a).catch(b)问题详解
  11. mysql odbc 没有_如何解决mysql odbc安装丢失的问题
  12. [Azure][PowerShell][ASM][04]Storage
  13. 各国语言缩写以及国际域名缩写
  14. 强化学习:基于MDP的经典RL方法 (基于南大俞扬博士演讲的少量修改和补充)
  15. STM32 tjpgd软件JPEG解码后RGB888数据格式问题
  16. java后端应届生面试题,附答案解析
  17. 【思维题】Bazinga
  18. CSS z-index与JQ fadeOut()缓动效果无效问题
  19. 小时候 觉得爸爸就是天 无所不能~
  20. 不同程序用不同网络_为什么喝不同的茶需要用不同类型的茶具?

热门文章

  1. Python Basic - Python open() 、closed()、write()、read()、 readline()、readlines()、with与文件进行交互
  2. 地心坐标系转地理坐标系(NED)
  3. win10计算机信息更改图,win10修改版本信息的简单方法【图文教程】
  4. OSChina 周三乱弹 —— 哽住
  5. OpenGL(可编程管线):Bezier曲面
  6. ***偷删警察蜀黍文件
  7. 【项目分析】利用三原则六指标解读人工智能Project PAI项目
  8. 您的teamviewer会话已经超时,即将停止
  9. shell循环loop
  10. 一万小时定律的数学解释-可怕的复利