栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《C++11标准库》3.1.13带领域的(Scoped)Enumeration (enum class)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《C++11标准库》3.1.13带领域的(Scoped)Enumeration (enum class)

C++11允许我们定义 scoped enumeration(作用域的枚举)--又称为 strong enumeration 或 enumeration class。这是C++ enumeration value(或 enumerator(枚举符))的一个比较干净的实现。

其声明格式为:

enum class 枚举名:类型 //若没有声明类型,则默认为 int
{
   枚举元素表列;
}

例如:

enum class Salutation : char { mr , ms , co , none };

Salutation s = Salutation :: mr ;

对于 Scoped enumeration 有以下优点:

* 绝不会隐式转换为至/自 int 类型。

* 如果数值(例如 mr)不在 enumeration 被声明的作用域内,你必须改写为 Salutation::mr ;

* 你可以明显定义低层类型(对于上述例子中,低层类型为 char )并因此获得一个保证大小的类型。

* 对于如果只有类型被使用,提前声明 枚举类型也是可以的,那会消除“为了新的 enumerations

value 而重新编译”的必要。

enum 与 enum class 的区别:

enum MyEnum1
{
    MY_FIRST ;
    MY_SECONEND ;  
}

enum MyEnum2
{
   MY_FIRST ; //重复定义
   MY_SECONEND ;   //重复定义
}

 

enum MyEnum1
{
    MY_FIRST ;
    MY_SECONEND ;  
}

enum MyEnum2 //可使用相同变量名
{
   MY_FIRST ; 
   MY_SECONEND ;   
}

对于不限定作用域的 enum 在同一作用域下,枚举量名不能相同,但限定作用域的 enum class 的枚举量作用域只在 {} 中

enum 的枚举量必须是(数值 is_integral),而不能是(字面常量 is_literal),例如不能使用 const char *类型。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号