enum是枚举类型就不多说了,用于自定义的数据。

现在说下enum和enum class有什么区别,为什么要用enum class。

enum有几种限制:
1.两个enum不能定义同样名称的数据,如下,会报重复定义的编译错误

// Defining enum1 Genderenum Gender { Male,Female };// Defining enum2 Gender2 with same values// This will throw errorenum Gender2 { Male,Female };

2.如果一个名称在enum里,就不能再定义这个名称的变量,如下,会报重定义的编译错误。

// Defining enum1 Gender
enum Gender { Male,Female };// Creating Gender type variable
Gender gender = Male;// creating a variable Male
// this will throw error
int Male = 10;

3.enum是类型不安全的

// Defining enum1 Genderenum Gender { Male,Female };// Defining enum2 Colorenum Color { Red,Green };// Creating Gender type variableGender gender = Male;Color color = Red;// Upon comparing gender and color// it will return true as both have value 0// which should not be the case actuallyif (gender == color)cout << "Equal";

猜猜这两个enum会相等吗?
答案是会的,会输出"Equal",这明明是两个不同的enum,但是enum里面的默认值是一样的。
但编译器会报warning信息

warning: comparison between ‘enum main()::Gender’ and ‘enum main()::Color’

所以需要enum class,它有以下特点

使用时像下面这样

// Declarationenum class EnumName{ Value1, Value2};// InitialisationEnumName ObjectName = EnumName::Value1;

enum class会克服enum的上面列举的限制

int main()
{//相同的名称可以出现在不同的enum class中enum class Color { Red,Green,Blue };enum class Color2 { Red,Black,White };enum class People { Good,Bad };// 可以定义变量名和enum class里的相同int Green = 10;// Instantiating the Enum ClassColor x = Color::Green;// Comparison now is completely type-safeif (x == Color::Red)cout << "It's Red\n";elsecout << "It's not Red\n";People p = People::Good;if (p == People::Bad)cout << "Bad people\n";elsecout << "Good people\n";// gives an error// if(x == p)// cout<<"red is equal to good";// won't work as there is no// implicit conversion to int// cout<< x;cout << int(x);return 0;
}

cpp enum enum class相关推荐

  1. Unity 基础 之 实现枚举(enum/Enum)遍历的三种简单方法(foreach/for)

    Unity 基础 之 实现枚举(enum/Enum)遍历的三种简单方法 目录 Unity 基础 之 实现枚举(enum/Enum)遍历的三种简单方法 一.简单介绍 二.实现原理 三.效果预览 四.实现 ...

  2. android intent enum,enum类型被intent所携带时需要注意的地方

    一般我们在Activity之间传递对象时多用Parcelable.比如写一个class,在这个class上标明implements Parcelable并实现接口就可以用Intent.putExtra ...

  3. C++11中enum class的使用

    枚举类型(enumeration)使我们可以将一组整型常量组织在一起.和类一样,每个枚举类型定义了一种新的类型.枚举属于字面值常量类型. C++包含两种枚举:限定作用域的和不限定作用域的.这里主要介绍 ...

  4. C++ enum前置声明

    前言 枚举在C++有两种形式,enum和enum class,enum是C++11之前的写法,也就是无范围枚举,enum class是C++11引入的,既有范围的枚举. 前置声明 无范围枚举 // A ...

  5. java enum 返回list_java – 组合枚举并使用getter返回指定的枚举

    这是您正在寻找的另一个示范.此解决方案与以前的解决方案之间的区别在于,此解决方案更通用且可重复使用.事实上这超出了原来的问题,显示了这种方法的一些其他好处.所以你可能只是评论你不需要的位.我还附上一个 ...

  6. Java源码分析--Enum

    Enum类是java.lang包中一个类,他是Java语言中所有枚举类型的公共基类 定义 public abstract class Enum<E extends Enum<E>&g ...

  7. enum python_enum:python实现枚举也很优雅

    介绍 enum是一个用来枚举的模块 创建枚举类型 import enum # 创建一个类,继承自enum下的Enum class Color(enum.Enum): red = 1 green = 2 ...

  8. 关于Swift中Struct,Class和Enum的哪些事儿

    前言 Swift type System Swift是强类型的,尽管只有六种类型. 命名类型: protocol, class , struct , enum 复合类型:tuple, function ...

  9. TypeScript 里的枚举类型 enum

    官网地址 枚举是 TypeScript 为数不多的不是 JavaScript 类型级扩展的特性之一. 枚举允许开发人员定义一组命名常量. 使用枚举可以更轻松地记录意图,或创建一组不同的案例. Type ...

最新文章

  1. 从大规模文献库中实现生物医学关系抽取
  2. C++_泛型编程与标准库(六)
  3. c语言xml字符串,C语言的XML解析器
  4. java ssh 和mvc_[转]JAVA三大框架SSH和MVC
  5. 计算机专业的学生该选择日后的人生道路?继续从事IT还是考公务员……
  6. 牛客小白月赛9 A签到(乘法逆元)
  7. 从汇编的眼光看C++(之delete内存泄露)
  8. [转]BT种子文件格式
  9. 我们通过一个服务器程序,以研究backlog参数对listen系统调用的影响,运行截图如下...
  10. php ajax跨域cookies,解决ajax跨域请求数据cookie丢失问题
  11. 注解@Component,@Controller,@Service,@Repository简单了解
  12. Android软键盘问题
  13. 知到大学生创业基础(上海理工大学)期末考试试题汇总(含答案)
  14. 超级记忆/图像数字记忆 110位数字图像转换表 31-40
  15. pyqgis iface AttributeError: ‘NoneType‘ object has no attribute ‘mapCanvas‘
  16. c++:ISBN号码
  17. Linux如何安装pcre
  18. 2013年春节放假通知
  19. 微软预览word_如何解决Microsoft Word中的打印问题
  20. 一个人写公众号能赚多少钱?我的副业之路

热门文章

  1. 用Java抓取10年大乐透中奖数据
  2. 考研英语单词-近义词分类-Fifth Day
  3. python自我总结笔记、加上一些自己思考_2020.1 月 阿巛个人总结
  4. JAVA中传值与“传引用“辨析
  5. ps 证件照替换背景色
  6. 浪潮云ERP到底属于什么水平?
  7. 4.7 攻城一起上,有兄弟不孤单——《逆袭大学》连载
  8. 【华为校招】【校招】【Java】单词搜索(DFS)
  9. dockers-系统学习-docker compose服务编排
  10. War Room - 战争房间