设有如下枚举类型定义,枚举类型设定范围

  设有如下枚举类型定义,枚举类型设定范围

  枚举优先于具有有限范围的枚举(C11/14) ——3354—C2.0第4讲_ Blog _ Enumeration具有有限范围的类型

  第0篇结论1枚举类型1.1没有范围限制1.2使用命名空间1.3限制范围2优点2.1避免命名空间污染2.2避免隐式类型转换2.3在某些情况下可以进行预声明以减少代码编译。

  结论有限选择的枚举类型限制了范围。

  限定范围的枚举类型在枚举类型内都是可见的,只能通过强制类型转换为其他类型(减少命名空间污染);范围有限的枚举类型和范围无限的枚举类型都支持基础类型的规范。范围受限枚举类型的默认底层类型是int,而范围无限制枚举类型没有默认类型(避免隐式类型转换);具有有限范围的类型总是可以预声明的,而没有有限范围的枚举类型只能在基础类型是默认类型的情况下预声明(减少重新编译)。

  1枚举类型

  1.1枚举PostStatus{

  SucceedDeal=0,//处理成功

  ServerMaintenanceError=1,///服务器维护状态

  SeverDisconnectError=2,///网络断开状态

  NoPermissionError=3,//没有权限

  Abnormalerror=4,//JSON数据异常

  dealdatabaserror=5///处理数据库异常

  };使用:

  STD:cout deal database error;

  1.2使用名称空间//post来请求状态

  命名空间类型{

  //已解析的发布类型

  枚举分析发布类型{

  WorkModeRequest=0,//工作模式

  Token=1,//令牌请求

  DownloadComInfoTableRequest=2,//下载商店信息

  StockSalesReturnSupportRequest=3,//输入返回权限

  StockSalesreturnBreakageOperateRequest=4,//采购、退货和挂失操作

  };

  }使用:

  STD:cout Type:GetChechstandInformationRequest;

  1.3限定范围类PostType{

  公共:

  //执行的发布类型

  枚举ExecutePostType{

  StockOperate=0,//购买操作

  SalesReturnOperate=1,///返回操作

  BreakageOperate=2,///挂失操作

  Tcommoditystockoperate=3,//拆分操作

  };

  };使用:

  STD:cout post type:DownloadTableOperate;

  2.1避免命名空间污染。不使用范围有限的枚举变量:

  枚举动物{

  猫,狗,乌龟

  };

  auto cat=true//错误:错误:将“cat”重新定义为不同种类的符号枚举有限范围的变量:

  枚举类动物{

  猫,狗,乌龟

  };

  auto cat=false//命名可以重复使用

  //动物c=猫;//无法执行隐式类型转换(错误:无法用“bool”类型的左值初始化“animal”类型的变量)

  动物c=动物:猫;

  2.2避免没有限定范围的枚举类型的隐式类型转换(执行隐式类型转换):

  枚举动物{

  猫,狗,乌龟

  };

  如果(第12.5类){

  STD:cout 12.5类;

  }否则{

  std:cout猫;

  }限定范围的枚举类型(不能进行隐式类型转换,进行类型转换时需要强制类型转换):

  枚举类动物{

  猫,狗,乌龟

  };

  if(Animal:cat 12.5){//错误:二进制表达式的操作数无效(“Animal”和“double”)

  STD:cout 12.5类;

  }否则{

  STD:cout static _ cast int(c);

  }对于需要隐式类型转换的情况,可以使用不合格的枚举类型进行操作。

  使用UserInfo=std:tuple std:string,STD:string;

  枚举UserInfoFields {Name,Age}。

  UserInfo uInfo

  auto val=STD:get Name(ui info);//隐式类型转换如果使用有限的作用域,会麻烦得多:

  使用UserInfo=std:tuple std:string,STD:string;

  枚举类UserInfoFields {Name,Age}。

  UserInfo uInfo

  auto val=STD:get static _ cast STD:size _ t(UserInfoFields:Name)(uInfo);//隐式类型转换的改进版本(因为std:get的参数是模板行参数,所以隐式转换的类型必须在编译时计算):

  //隐式类型转换模板

  模板类型名E

  const expr typename STD:underlying _ type E:type

  toUType(E枚举器)noexcept{

  返回static _ cast typename STD:underlying _ type E:type(枚举器);

  }

  使用UserInfo=std:tuple std:string,STD:string;

  枚举类UserInfoFields {Name,Age}。

  UserInfo uInfo

  auto val=STD:get toUType(UserInfoFields:Name)(uInfo);//隐式类型转换

  2.3可以进行预声明,以减少某些情况下范围不合格的枚举类型(不能使用预声明):

  枚举动物;//错误:ISO C禁止对“enum”类型的正向引用定义了作用域的枚举类型:

  枚举类Animal2如果enum中的代码被更改,所有没有限制范围的enum类型的文件都将被重新编译。但是,使用了限定范围的枚举类型,只需要重新编译枚举文件。

  只要指定了基础类型,就可以预声明没有限制性函数的枚举类型。

  枚举动物:int

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: