一、枚举类介绍

枚举类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)介绍相关推荐

  1. 枚举类与注解的详细介绍

    目录 枚举类的使用 自定义枚举类  : 使用enum定义枚举类 Enum类的主要方法 实现接口的枚举类 注解 注解 (Annotation) 概述 常见的Annotation示例 示例二:在编译时进行 ...

  2. 为什么枚举类优于纯枚举?

    本文翻译自:Why is enum class preferred over plain enum? I heard a few people recommending to use enum cla ...

  3. 比起睡觉,我更喜欢刷巨详细的Java枚举类,这是来自猿人的自觉呀

    零基础学习之Java枚举类 概述 JDK1.5之前 创建枚举类 代码示例 JDK1.5之后 创建枚举类 代码示例 枚举类继承父类 基本介绍 代码示例 枚举类实现接口 基本介绍 代码示例 枚举类实现单例 ...

  4. c枚举类型enum例题_一篇文章让你详细了解Java中Enum枚举类的使用

    文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...

  5. java 修改 枚举类字段_枚举枚举和修改“最终静态”字段的方法

    java 修改 枚举类字段 在本新闻通讯中,该新闻通讯最初发表在Java专家的新闻通讯第161期中,我们研究了如何使用sun.reflect包中的反射类在Sun JDK中创建枚举实例. 显然,这仅适用 ...

  6. Java基础笔记 – 枚举类型的使用介绍和静态导入

    Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...

  7. python 枚举类型_Python枚举类

    本篇主要介绍Python中枚举类的用法,更多内容请参考:Python学习指南 当我们需要定义常量时,一个办法就是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 · ...

  8. php枚举属于什么类型,python枚举类型是什么?python枚举类型的简单介绍

    本篇文章给大家带来的内容是关于python枚举类型是什么?python枚举类型的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:枚举类型的定义 二:枚举类和普通类的区别 ...

  9. java enum枚举类的用法以及高级玩法

    enum(枚举)类介绍 java枚举类是一组预定义常量的集合,使用enum关键字声明这个类,常量名称官方建议大写 1.enum类基本用法 举一个常见的例子,例如星期就可以描述为一个枚举类,如下 pub ...

  10. java什么是类枚举类_java枚举类型是什么?

    下面就是一个典型枚举类型的定义: Java代码 Java代码 public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 显然,enum很像特殊的class,实际 ...

最新文章

  1. mybatis3:Invalid bound statement (not found)
  2. EelemntUI中e-form表单校验的使用以及表单校验的规则
  3. 无线技术之WLAN八个常见问题解答(收藏)
  4. OA系统部署短信过程
  5. Ubuntu/Mac彻底解决手机ADB识别问题
  6. android 默认焦点设置_Android界面设计基础:控件焦点4个步骤
  7. 数据自动机之如何使用CYaRon造数据
  8. kafka 查看消费者组
  9. spring源码--第七个后置处理器的使用:初始化方法
  10. php paypal支付接口文档,php 实现PayPal支付
  11. [事务] 事务的传播机制
  12. 计算机程序无法响应如何解决,电脑卡死出现应用程序未响应不可以正常工作怎么办?...
  13. 国内宠物保险“不受宠”背后,这门生意该如何做好?
  14. AndroidStudio快捷键汇总
  15. 淘宝模拟登录 +淘宝商品详情数据、淘宝商品列表数据爬取
  16. 开山斧 0.3.5版本
  17. 系统跟服务器的区别,域名服务器与根服务器区别
  18. 脉脉发布AI人才数据图鉴;『李沐·深度学习论文精读』视频合辑;CVPR 2022自动驾驶资源合集;线性代数图绘笔记;前沿论文 | ShowMeAI资讯日报
  19. 生产周期如何改善?我来教您
  20. 一个人花8块钱买了只鸡,9块钱卖了,又10块钱买回来,11块钱又卖了,他赚了多少钱

热门文章

  1. 微信公众号采集之免费采集公众号爆文工具
  2. python怎样计算增长率_增长率如何计算
  3. 重要发布全总结丨一文看懂阿里云弹性计算年度峰会
  4. Latex 数学符号速查字典(第2版)
  5. matlab求函数在区间内最大值与最小值
  6. VBlog项目代码理解之前端
  7. 关于前端SPA(单页面应用)
  8. wps压缩word文档方法
  9. 如何管理软件资产及如何管理软件许可资产?
  10. matlab abort,matlab自动关闭是怎么回事???