c++ enum 给定类型_C++11作用域内枚举enum

在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++要求在声明嵌套模板时使用空格将尖括号分开。...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

httpRuntime 问题

httpRuntime是配置asp.net http运行时设置,以确定如何处理对asp.net应用程序的请求。 executionTimeout:表示允许执行请求的最大时间限制,单位为秒 maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将…

linux文件软链接与硬链接

1.命令格式: ln [参数][源文件或目录][目标文件或目录] 软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间。 2.命令功能: Linux文件系统中,有所谓的链接(link),我们可以将其视为…

java操作Excel的poi 遍历一个工作簿

遍历一个工作簿 package com.java.poi;import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.…

PHP 一个比较完善的文件上传(转).

转点别人的代码&#xff0c;留着自己用&#xff01;<HTML> <HEAD> <TITLE>文件上传</TITLE> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"></HEAD> <BODY> <?$UploadedFile$_FILES[U…

mysql 删除记录代码_mysql 删除记录时报错

在sql命令行,删除一条记录时,发现一个很奇怪的错误下面的语句是可以正常执行的:delete from t_mid_test_convention where convention_id33;但是下面的报语法错:delete from t_mid_test_convention as mt2 where mt2.convention_id33;mysql>mysql> delete from t_mid_tes…

git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作!

点击蓝色小字关注!关注一下你就不会有bug&#xff01;合并操作相对于常规的 commit&#xff0c;当使用 git merge 合并两个分支的时候&#xff0c;你会得到一个新的 merge commit。当我们 git show 的时候会出现类似信息&#xff1a;1commit 6dd0e2b9398ca8cd12bfd1faa1531d86d…

最长非单调增序列(最长非单调增序列,,要用N*LOG N(非常值得琢磨的算法。)...

http://acm.pku.edu.cn/JudgeOnline/problem?id1887 &#xff08;最长非单调增序列&#xff0c;&#xff0c;要用N*LOG N&#xff08;不然会超时。&#xff09;&#xff09; 二分模板&#xff1a; int Find(int a,int end) { if(a>ans[1])return 1; for(int beg1;beg!end-1…

Spring中抛出异常时,既要要返回错误信息,还要做事务回滚

情况一&#xff1a;如果没有在程序中手动捕获异常&#xff0c;如下代码事务会回滚 Transactional(rollbackFor { Exception.class }) public void test() throws Exception { doDbStuff1(); doDbStuff2();//假如这个操作数据库的方法会抛出异常&#xff0c;方法doDb…

PS教程第十八课:放大缩小

导航器进行放大缩小操作

java mysql show status_Java 能不能执行mysql 中的show master status 命令

展开全部详细参32313133353236313431303231363533e4b893e5b19e31333337376263考文章&#xff1a;http://www.yuanxingyuan.com/?id18可以的&#xff0c;使用Statement 的 executeQuery&#xff0c;示例代码&#xff1a;public static List getDBMasterStatus() {List status…

git bash卡顿解决

清理windows临时目录可以解决&#xff0c;参见 http://blog.itpub.net/267265/viewspace-2287069/转载于:https://www.cnblogs.com/ShiningWay/p/11042645.html

[Gamma阶段]展示博客

水哥牛X团队[Gamma阶段]展示博客 微信小程序搜索“小小易校园”即可体验 项目愿景 想参加竞赛&#xff0c;锻炼自己&#xff0c;却找不到合适的队友想进行实习&#xff0c;体验工作&#xff0c;每天不得不翻遍吐槽版的几百条信息却一无所获发布在吐槽版的“求组队”被聊天淹没&…

删除sessionstorage_localStorage 和 sessionStorage 介绍

一、 简述sessionStorage 和 sessionStorage 是 HTML5 新增的两个特性&#xff0c;这两个特性主要是用来作为会话存储和本地存储来使用的&#xff0c;解决了 cookie 存储空间不足的问题&#xff1b;sessionStorage 属性允许你访问一个 session Storage 对象&#xff0c;用于存储…

游标的使用方法

游标的使用方法 select * from aselect * from b declare Mycursor CURSORfor select * from b open Mycursor declare stuID nchar(10)declare math smallint fetch next from Mycursorinto stuID,math while(FETCH_STATUS 0)begin update a set math math where stuID stu…

查看zookeeper版本

命令 echo stat|nc localhost 2181 zookeeperkafka-zookeeper-0:/$ echo stat|nc localhost 2181 Zookeeper version: 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMTClients: /127.0.0.1:54002[0](queued0,recved1,sent0) /10.244.5.242:55…

redis springmvc mysql_redis和mysql怎么一起在springmvc里面

展开全部一、mysql集成到springMVC中的方法&#xff1a;1、在SRC目录下创建一个32313133353236313431303231363533e4b893e5b19e31333361323538db-config.properties文件来存放我们的数据源配置信息&#xff1a;db.url jdbc:mysql:///springmvcdb?useUnicodetrue&character…