C++ 关键字 enum
来源:互联网 发布:centos设置防火墙端口 编辑:程序博客网 时间:2024/05/19 12:40
1. 概念
我们经常需要为某些属性定义一组可选择的值,例如:颜色(赤橙黄绿青蓝紫)、性别(男女)、星期(一二三四五六七),这些属性的值是能够被一一列举出来的,通常用常量值关联的方法来记录这些属性组的值,我们可能会这样编写代码:
const int male = 0;
const int female = 1;
虽然这种方法也能奏效,但是它有个明显的缺点:没有指出这些值是相关联的。枚举提供了一种替代的方法,不但定义了整数常量集,而且还把它们聚集成组。如果一个变量只有几种可能的值,则可以定义为枚举(enumeration)类型,所谓“枚举”就是指把可能的值一一列举出来,变量的值只能限于列举出来的值得范围内。
2. 使用
定义和初始化枚举:枚举的定义包括关键字enum,其后是一个可选的枚举类型名,和一个用花括号括起来、用逗号分开的枚举成员列表。
#include <iostream>using namespace std;enum Weekday{sun, //0mon, //1tue, //2wed, //3thu, //4fri, //5sat //6 };int main(){Weekday day = tue;switch(day){case mon:case tue:case wed:case thu:case fri:{cout<<"Go to work!"<<endl;}break;case sat:case sun:{cout<<"Entertainment!"<<endl;}break;}return 0;}枚举名是可选的,所以也可以不声明有名字的枚举类型,而直接定义枚举变量,例如:
enum { sun, mon, tue, wed, thu, fri, sat } workday,weekend;
默认地,第一个枚举成员赋值为 0,后面的每个枚举成员赋的值比前面的大 1。也可以为一个或多个枚举成员提供初始值,但用来初始化枚举成员的值必须是一个常量表达式。例如,可以定义下列枚举类型:
// shape is 1, sphere is 2, cylinder is 3, polygon is 4enum Forms {shape = 1, sphere, cylinder, polygon};在 枚举类型 Forms 中,显式将 shape 赋值为 1,其他枚举成员隐式初始化:sphere 初始化为 2,cylinder 初始化为 3,polygon 初始化为 4。 枚举成员值可以是不唯一的:
// point2d is 2, point2w is 3, point3d is 3, point3w is 4enum Points { point2d = 2, point2w,point3d = 3, point3w };上面的代码中,枚举成员 point2d 显式初始化为 2,下一个枚举成员 point2w 默认初始化,即它的值比前一枚举成员的值大 1,因此 point2w 初始化为 3,枚举成员 point3d 显式初始化为 3,一样,point3w 默认初始化,结果为 4。
每个 enum 都定义了一种新的类型。和其他类型一样,可以定义和初始化枚举类型的对象,也可以以不同的方式使用这些对象。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行:
Points pt3d = point3d; // ok: point3d is a Points enumerator Points pt2w = 3; // error: pt2w initialized with int pt2w = polygon; // error: polygon is not a Points enumerator pt2w = pt3d; // ok: both are objects of Points enum type注意把 3 赋给 Points 对象是非法的,即使 3 与一个 Points 枚举成员相关联
3. 枚举大小
对于枚举大小,通常枚举和 int 的大小是一样的:
sizeof(Weekday) == sizeof(day) == sizeof(int)
但是枚举的大小也不一定就和 int 一样,详细可参看 C++标准文档(ISO14882) 中对于枚举的描述
本文参考书目:《C++ Primer》
- C语言enum关键字
- c enum 枚举关键字
- C语言关键字--- enum typedef
- enum关键字的使用技巧--C、MFC、、
- enum 关键字
- enum 关键字
- enum 关键字
- 关键字enum
- Enum关键字
- Daily-C-Study(2):C语言enum关键字
- enum关键字——C语言深度剖析
- C关键字解读——volatile, extern, struct, union, enum
- 《C关键字分析》之sizeof,enum、union和struct
- C中关键字enum--枚举--精巧的用法
- c语言关键字static,const,extern,struct,enum,union
- C++ 关键字 enum
- 关键字enum的用法
- Java关键字之enum
- Android获取屏幕尺寸
- java 面向对象 接口 抽象
- UVa 10878 磁带解码
- 易 經 原 文
- 黑马程序员__ 6java基础 接口 多态 内部类
- C++ 关键字 enum
- ecshop和discuz整合中问题完美解决方法
- DHT11驱动程序
- I'm coming,2014
- PLSQL与Navicat Premium远程连接Oralce
- 通用权限管理设计 之 数据库结构设计
- [DFS]《奥赛一本通》 素数环
- IT人生存法则
- kindeditor的上传图片简单代码