枚举类(Enumerated types)介绍
一、枚举类介绍
枚举类(Enumerated types)是一种用户自定义的类型,用户自定义标识符(identifers)作为类型的名称,然后设置一系列枚举子(enumerators)作为类型的可赋值。枚举类的对象可以选这些enumerator作为其的值。
语法:
enum type_name {value1,value2,value3,..
} object_names;
或者
// unscoped enum:
enum [identifier] [: type] {enum-list}; // scoped enum:
enum [class|struct] [identifier] [: type] {enum-list};
举例:
enum colors_t {black, blue, green, cyan, red, purple, yellow, white};colors_t mycolor;
mycolor = blue;
if (mycolor == green) mycolor = red;
二、enum定义方法
用enum定义的类型中的值总是被隐式自动赋予int类型的值,相当于这些enumerator的别名。如果没有特别说明,那么第一个enumerator被赋值0,第二个被赋值1,以此类推。如果给enumerator设值,而其后一个enumerator没有被赋值,那么这一位的值就是前一位的用户赋值+1。
举例A:
enum months_t { january=1, february, march, april,may, june, july, august,september, october, november, december} y2k;
在这里,january到december的值的区间为1-12。注意,1和january在这个枚举类型中没有差别,作用是一样的。
举例B:
enum Suit { Diamonds = 5, Hearts, Clubs = 4, Spades };
则Diamonds, Hearts, Clubs, 和 Spades 的值分别是 5, 6, 4, and 5。
举例C:
int类型不能被转换为enum类型:
int account_num = 135692;
Suit hand;
hand = account_num; // error C2440: '=' : cannot convert from 'int' to 'Suit'
但是enum类型可以被转换为int类型:
int account_num = Hearts; //OK if Hearts is in a unscoped enum
三、enum class定义方法
1.可以创建不被隐式转换为int类型的枚举类,用来保证类型的安全性。创建方法使用的是enum class而不是enum关键字。
举例:
enum class Colors {black, blue, green, cyan, red, purple, yellow, white};
使用这种方法定义后,在用到enumerator值时必须标明到该类型空间中(enum定义方法也可如此使用):
Colors mycolor;mycolor = Colors::blue;
if (mycolor == Colors::green) mycolor = Colors::red;
2.用enum class定义的枚举类型对于其隐式类型有更好的可控性。可以设置为int类型,char类型,short类型等,不同类型使得枚举类型占用的空间也不同。
举例:
enum class EyeColor : char {blue, green, brown};
这样定义之后,EyeColor就是一个和char类型有相同大小的独立类型。
3.使用例子:
namespace CardGame_Scoped
{enum class Suit { Diamonds, Hearts, Clubs, Spades };void PlayCard(Suit suit){if (suit == Suit::Clubs) // Enumerator must be qualified by enum type{ /*...*/}}
}namespace CardGame_NonScoped
{enum Suit { Diamonds, Hearts, Clubs, Spades };void PlayCard(Suit suit){if (suit == Clubs) // Enumerator is visible without qualification{ /*...*/}}
}
注:原文转自http://www.cplusplus.com/doc/tutorial/other_data_types/和http://msdn.microsoft.com/en-us/library/2dzy4k6e.aspx,翻译的时候有删改,仅供自己参考。
枚举类(Enumerated types)介绍相关推荐
- 枚举类与注解的详细介绍
目录 枚举类的使用 自定义枚举类 : 使用enum定义枚举类 Enum类的主要方法 实现接口的枚举类 注解 注解 (Annotation) 概述 常见的Annotation示例 示例二:在编译时进行 ...
- 为什么枚举类优于纯枚举?
本文翻译自:Why is enum class preferred over plain enum? I heard a few people recommending to use enum cla ...
- 比起睡觉,我更喜欢刷巨详细的Java枚举类,这是来自猿人的自觉呀
零基础学习之Java枚举类 概述 JDK1.5之前 创建枚举类 代码示例 JDK1.5之后 创建枚举类 代码示例 枚举类继承父类 基本介绍 代码示例 枚举类实现接口 基本介绍 代码示例 枚举类实现单例 ...
- c枚举类型enum例题_一篇文章让你详细了解Java中Enum枚举类的使用
文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...
- java 修改 枚举类字段_枚举枚举和修改“最终静态”字段的方法
java 修改 枚举类字段 在本新闻通讯中,该新闻通讯最初发表在Java专家的新闻通讯第161期中,我们研究了如何使用sun.reflect包中的反射类在Sun JDK中创建枚举实例. 显然,这仅适用 ...
- Java基础笔记 – 枚举类型的使用介绍和静态导入
Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...
- python 枚举类型_Python枚举类
本篇主要介绍Python中枚举类的用法,更多内容请参考:Python学习指南 当我们需要定义常量时,一个办法就是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 · ...
- php枚举属于什么类型,python枚举类型是什么?python枚举类型的简单介绍
本篇文章给大家带来的内容是关于python枚举类型是什么?python枚举类型的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:枚举类型的定义 二:枚举类和普通类的区别 ...
- java enum枚举类的用法以及高级玩法
enum(枚举)类介绍 java枚举类是一组预定义常量的集合,使用enum关键字声明这个类,常量名称官方建议大写 1.enum类基本用法 举一个常见的例子,例如星期就可以描述为一个枚举类,如下 pub ...
- java什么是类枚举类_java枚举类型是什么?
下面就是一个典型枚举类型的定义: Java代码 Java代码 public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 显然,enum很像特殊的class,实际 ...
最新文章
- mybatis3:Invalid bound statement (not found)
- EelemntUI中e-form表单校验的使用以及表单校验的规则
- 无线技术之WLAN八个常见问题解答(收藏)
- OA系统部署短信过程
- Ubuntu/Mac彻底解决手机ADB识别问题
- android 默认焦点设置_Android界面设计基础:控件焦点4个步骤
- 数据自动机之如何使用CYaRon造数据
- kafka 查看消费者组
- spring源码--第七个后置处理器的使用:初始化方法
- php paypal支付接口文档,php 实现PayPal支付
- [事务] 事务的传播机制
- 计算机程序无法响应如何解决,电脑卡死出现应用程序未响应不可以正常工作怎么办?...
- 国内宠物保险“不受宠”背后,这门生意该如何做好?
- AndroidStudio快捷键汇总
- 淘宝模拟登录 +淘宝商品详情数据、淘宝商品列表数据爬取
- 开山斧 0.3.5版本
- 系统跟服务器的区别,域名服务器与根服务器区别
- 脉脉发布AI人才数据图鉴;『李沐·深度学习论文精读』视频合辑;CVPR 2022自动驾驶资源合集;线性代数图绘笔记;前沿论文 | ShowMeAI资讯日报
- 生产周期如何改善?我来教您
- 一个人花8块钱买了只鸡,9块钱卖了,又10块钱买回来,11块钱又卖了,他赚了多少钱