在C++11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的。如果还不知道C++中枚举(enum)是什么,可以看这篇:枚举enum

如:苹果和桔子都有大,中,小。写个代码来说明下:

两枚举类型中相同枚举值

C++

1

2

enumapple{big,medium,small,special};

enumorange{big,medium,small};

以上代码编译不会通过的,因为apple和orange在同一个作用域内。之前我们可能会改成用size来做枚举,但apple枚举又多了一个枚举值,这样在C++11之前版本中就不会很好处理。

哪C++11是如何处理这类问题?

C++11提供一种新枚举(enum),其枚举量的作用域为类。

具体声明如下:

C++11作用域内枚举

C++

1

2

enumclassapple{big,medium,small,special};

enumclassorange{big,medium,small};

声明中的class关键字,也可以用struct。

C++11作用域内枚举struct

C++

1

2

enumstructapple{big,medium,small,special};

enumstructorange{big,medium,small};

这样枚举的作用域为类后,不同枚举(enum)定义中的枚举量就不会有名称冲突。

如何使用作用域内枚举?

使用枚举名来限定枚举量,这样编译器才会明白用哪个的枚举量。

使用C++11作用域内枚举量

C++

1

2

applea1=apple::big;

orangeo1=orange::big;

C++11作用域内枚举不能默认隐式转换成int

C++

1

2

3

4

5

6

7

//C++ 98

inti=a1;//正确

//C++ 11

intj=o1;//错误

intk=int(o1);//显示类型转换

上面代码可以看出C++11代码会更加安全,如一定要转换,必需显示类型转换。

为什么不能直接转换具体原因?

C++98中,枚举类的具体值类型是什么,可能随系统而异,没有硬规定。但一般都会是int类型。

C++11中,枚举类的具体值类型不在依赖系统,可以自己定义。如不指定,默认C++11作用域内枚举的值类型是int。

如何指定C++11作用域内枚举的值类型?

指定枚举值类型定义语法:

C++11指定枚举值类型定义

C++

1

2

enumclass:shortapple{big,medium,small,special};//值类型为short

enumclass:intorange{big,medium,small};/值类型为int

相关文章:自定义类型枚举enum枚举enum没有新定义类型,结构是一个新类型这点可以从它们的定义看到,枚举的每个值没有类型,只有名字,结束用“,”结构类的成员都有自己的类型,有变量名,结束用“;”。其时枚举enum是整型变量,枚举enum的定义意义,就是以Arrow类型为例,它的取值只有4个,主要还是为了编程时方便管理,方便阅读,方便理解程序。运用有非常多,如颜色枚举、季节枚举、月份枚举、星期枚举等等。...

C++11语言auto关键字作用C++11中对关键字auto进行了重新定义,可以让编译器根据初始值类型自动推断变量的类型。auto a  = 0;   //推断出a类型为int atuo b = 0.0;  //推断出b类型doublu auto c = 'A';  //推断出c类型是char如果不知道为什么能自动推断出来可以看下:常量类型     和   C++常量类型 获取上面写的都是推断基本类型,当然C++11 auto关键字并非只样简单的运用,更多的是为了自定义类型推断。相信很多人在写迭代器时会很头痛,太长了。先个vector类型的迭代器。...

C++11新增数组初始化方式C++11之前数组使用方法可以参考这篇:数组使用注意点今天这篇主要讲C++11数组新增加初始化方式。 1.C++11数组初始化时可省略等号 2.C++11数组初始化时大括号内可以不包含任何东西 3.C++11数组初始化时不能缩窄转换。缩窄转换:就是宽类型转窄类型,例如double转int ...

C++11字符串新增初始化方式C++11除了支持之前版本的初始化方式外,还支持列表初始化方式。列表初始化可以看上篇:C++11新增数组初始化方式下面写个新增初始化方式和之前赋值方式比较:...

C++都支持哪些作用域C++语言作用域符号是两个冒号:: ,相信大家不陌生,在看代码是一定会有很多地方有这::符号。作用域,如果不理解是什么,可以先理解成起作用的范围。书上都是写作用域,这样比较书面话,如写成作用范围就不哪么好听。C++语言支持3种作用域: 1.局部作用域(local scope) 2.名字空间作用域(namespace scope)   3.类作用域(class scope) ...

C++11新增模板类array原因vector类的功能比数组强大,但效率没有数组高(vector对象分配在自由存储区或堆中)。效率来讲内置数组是最高的,但是会不安全不方便,如下标越界、两个数组赋值要用for循环一个个赋值。以上两点,C++11中就新增了array类模板,来解决内置数组不安全不方便,相比vector提高效率(array对象分配在栈中)。...

C++11新增基于范围的for循环之前在用for循环时,每次都要写条件,并不是很方法。double a[5] = {1,2,3,4,5}; for(int i=0;i...

C++11关键字decltype用途关键字decltype将变量的类型声明为表达式指定的类型。下面的语句的含义是,让y的类型与x相同,其中x是一个表达式。decltype (x) y;decltype的工作原理比auto复杂,可以指定类型为引用和const。...

C++11新增关键字nullptrnullptr关键字就是表示空指针的意思,C++11之前空指针都是NULL。已经有了NULL哪为什么还要有nullptr关键字? nullptr表示空指针,不能转换为整型类型。为了向后兼容,C++11仍允许用0(NULL)来表示空指针。建议使用nullptr而不是0(NULL),因为更高的类型安全。...

C++11两个尖括号中间可以不用加空格在之前写C++代码时,比如声明嵌套模板(vector里面存的还是vector),这时就会有两个尖括号出现。就会与运算符>>搞混,C++要求在声明嵌套模板时使用空格将尖括号分开。...

c++ enum 给定类型_C++11作用域内枚举enum相关推荐

  1. C++11 作用域内枚举

    1 enum class MyEnum{ 2 P1 = 1, 3 P2, 4 P3, 5 P4, 6 P5 7 }; 8 9 MyEnum myEnum = MyEnum::P2; 使用作用域的方式获 ...

  2. c++ enum 给定类型_C++ 枚举类型详解

    枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 定义格式:枚举类型的定义格式为: enum {}; 格式说明: 关键字enum ...

  3. c++ enum 给定类型_讲解C++中的枚举类型以及声明新类型的方法

    C++枚举类型如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内.声明枚举类型用 ...

  4. c++ enum 给定类型_在 Rust 中创建 C/C++ API

    Rust 是一种神奇的语言,有着更好的生态系统.许多 Rust 的设计决策都非常适合向现有的C/C++系统添加新功能,或者逐步替换这些系统的部分! 当我尝试为 Rust 创建 C++ API 时,我发 ...

  5. Java枚举(Enum)类型使用的正确姿势

    关于Java Enum的介绍及原理参见 Java枚举(Enum)类型的基本介绍与原理探求 Enum类型的基本使用 定义一个枚举类的主要作用就是在逻辑代码中对某个变量的值进行比较.同样以季节的枚举类Se ...

  6. python不需要先声明变量类型、在第一次_Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。...

    Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型. 答:× ()不属于"零余者"形象特征 答:思想大于行动 以下关于模糊关系的正确说法是 答:模糊关系描 ...

  7. C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)

    文章目录 目录 一. 数据类型 C++ 中的数据类型 typedef enumeration枚举类型 c++中变量类型 二.变量作用域 三.常量 四.修饰符类型 目录 一. 数据类型 C++ 中的数据 ...

  8. java 枚举类型enum用法_别再说Python没有枚举类型了,好好看看

    枚举 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们 ...

  9. EL表达式的11个内置对象

    EL是JSP内置的表达式语言 JSP2.0开始,不让再使用Java脚本,而是使用EL表达式和动态标签来代替Java脚本 EL替代的是<%=... %>,也就是说EL只能做输出 EL可以输出 ...

最新文章

  1. 又搜集一批项目源码,同样改改就能用
  2. 推荐两本旧书 recommend two CM books,which are not up-to-date
  3. 初学__Python——Python数据类型之字符串
  4. puppet 基础篇
  5. ./ffmpeg: error while loading shared libraries: libavdevice.so.57
  6. 渗透测试入门11之一次完整的渗透测试实验
  7. python自动化开发和全栈开发_python全栈开发devops运维自动化方向初到高级在线课程分享...
  8. Spring Boot 使用 Log4j2
  9. tomcat日志配置调整
  10. 计算机主板的电路,电脑主板电路图全).pdf
  11. UBNT设置AP模式注意事项
  12. 蓝湖能导入html文件么,axure怎么导入蓝湖
  13. 第一周礼拜四 神藉着祂的众仆人行事(上)
  14. 【云原生】什么是 CI/CD ?| 软件交付中常见的问题
  15. CMake | include_guard命令详解
  16. 前端网页打印插件print.js
  17. R语言使用fisher.test函数进行精确概率检验、检验两个分类变量是否独立(自定义构建列联表仿真数据)
  18. “8 岁学编程,做了近 40 年程序员,我总结了 15 条经验宝典”
  19. 汽车改装之3G上网车载电脑篇
  20. 2014-02-27 23:00 2014年最新GHOST_win7_64位旗舰版系统下载

热门文章

  1. 前端学习(3287):Aop2
  2. [html] HTML5的video怎么取消自动播放?
  3. 前端学习(2902):javascript浏览器的历史
  4. [css] 你了解css3的currentColor吗?举例说明它的作用是什么?
  5. [css] box-sizing的宽度包含了哪些?
  6. 工作311:uni-携带当前参数跳转页面传值
  7. [js] alert如何让文本换行?
  8. 前端学习(2530):使用computed获取数据
  9. 前端学习(1304):package.json
  10. 前端学习(1081):构造函数和原型概述