C++Primer之4.6枚举读书笔记
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
- 设置枚举量的值
可以使用赋值运算符来显式地设置枚举量的值:
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枚举读书笔记相关推荐
- C++Primer PLus 第五版读书笔记
处理第一个问题: 1)某书店以文件形式保存其每一笔交易.没一笔交易记录某本书的销售情况,含有ISBM.销售册数和销售单 价.每一笔交易形如:0-201-70352-X 4 24.99 -------- ...
- C Primer Plus (第6版) 读书笔记_Chapter 1
第 1 章 初识 C 语言 ■ C 的历史和特性 ■ 编写程序的步骤 ■ 编译器和链接器的一些知识 ■ C 标准 1.1 C 语言的起源 1972年,贝尔实验室的 丹尼斯 • 里奇(Dennis ...
- C Primer Plus (第6版) 读书笔记_Chapter 2
本章介绍以下内容: ■ 运算符:= ■ 函数:main().printf() ■ 编写一个简单的 C 程序 ■ 创建整型变量,为其赋值并在屏幕上显示其值 ■ 换行符 ■ 如何在程序中写注释,创建包含多 ...
- C++ 操作重载与类型转换 《C++Primer》第14章 读书笔记
本章内容一览: 1.基本概念 和 限制条件 只有重载的函数调用运算符operator()能有默认实参,其他重载运算符不能有默认实参. 一个重载的运算符,至少含有一个类类型的参数. 可被重载的运算符: ...
- C++ Primer 第三版 读书笔记
1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0.如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0 2.一般定义指针最好写成:" string * ...
- C++ Primer读书笔记(从后向前看)
(从后向前看) 标题:重载函数再论 重载函数是C++提出来的概念,但是在C中却未必没有.比如"1+3"和"1.0+3.0",虽然都是加法,做的却不是同的操作:编 ...
- c++primer读书笔记
c++全局变量无声明.多次定义会冲突.利用命名空间 c++四种cast操作符的区别 1.static_cast,支持子类指针到父类指针的转换,并根据实际情况调整指针的值,反过来也支持,但会给出编译警告 ...
- 读书笔记之C Primer Plus 1
为什么阅读<C Primer Plus>第六版 准备好好研究下redis源码,但是很久没用c语言写代码了,平时工作主要用java和js. 所以准备重新阅读学习下c语言经典书籍:C Prim ...
- C++ Primer读书笔记
(从后向前看) 标题:重载函数再论 重载函数是C++提出来的概念,但是在C中却未必没有.比如"1+3"和"1.0+3.0",虽然都是加法,做的却不是同的操作:编 ...
最新文章
- 自控力极差的人如何自救?两个方法战胜拖延!
- “2018中国AI英雄风云榜”年度人物榜:“AI天才”何恺明
- Bootstrap File Input 真正 解决跨域问题
- jni java共享变量_JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量 .
- Intellij IDEA 导入或运行流式处理框架storm以及java.lang.NoClassDefFoundError报错的解决方案
- oracle导数据不释放内存,关于ORACLE数据库delete后释放空间问题
- 如何监控oracle的索引是否使用
- mysql int类型为null_MySQL INT类型可以为非零NULL吗?
- 京东智联云张晓东cdn_京东智联云:数智力量驱动实体经济复苏
- Promise.then(a, b)与Promise.then(a).catch(b)问题详解
- mysql odbc 没有_如何解决mysql odbc安装丢失的问题
- [Azure][PowerShell][ASM][04]Storage
- 各国语言缩写以及国际域名缩写
- 强化学习:基于MDP的经典RL方法 (基于南大俞扬博士演讲的少量修改和补充)
- STM32 tjpgd软件JPEG解码后RGB888数据格式问题
- java后端应届生面试题,附答案解析
- 【思维题】Bazinga
- CSS z-index与JQ fadeOut()缓动效果无效问题
- 小时候
觉得爸爸就是天
无所不能~
- 不同程序用不同网络_为什么喝不同的茶需要用不同类型的茶具?
热门文章
- Python Basic - Python open() 、closed()、write()、read()、 readline()、readlines()、with与文件进行交互
- 地心坐标系转地理坐标系(NED)
- win10计算机信息更改图,win10修改版本信息的简单方法【图文教程】
- OSChina 周三乱弹 —— 哽住
- OpenGL(可编程管线):Bezier曲面
- ***偷删警察蜀黍文件
- 【项目分析】利用三原则六指标解读人工智能Project PAI项目
- 您的teamviewer会话已经超时,即将停止
- shell循环loop
- 一万小时定律的数学解释-可怕的复利