c++11 强类型枚举 enum class

摘要:
在标准C++中,枚举类型不是类型安全的。枚举类型被视为整数,这允许在两种不同的枚举类型之间进行比较。C++03提供的唯一安全机制是整数或枚举值不能隐式转换为另一个枚举类型。最后,枚举的名称都暴露在通用范围内,因此C++03两个不同的枚举不能具有相同的枚举名称。)C++11引入了一个特殊的“枚举类”来避免上述问题。使用enumclass的语法声明:enumclassEnumeration{Val1,Val2,Val3=100,Val4/*=101*/,};此枚举是类型安全的。

在标准C++中,枚举类型不是类型安全的。枚举类型被视为整数,这使得两种不同的枚举类型之间可以进行比较。C++03 唯一提供的安全机制是一个整数或一个枚举型值不能隐式转换到另一个枚举别型。 此外,枚举所使用整数类型及其大小都由实现方法定义,皆无法明确指定。 最后,枚举的名称全数暴露于一般范围中,因此C++03两个不同的枚举,不可以有相同的枚举名。
(好比 enum Side{ Right, Left }; 和 enum Thing{ Wrong, Right }; 不能一起使用。)

C++11 引进了一种特别的 "枚举类",可以避免上述的问题。使用 enum class 的语法来声明:
enum class Enumeration{ Val1, Val2, Val3 = 100, Val4 /* = 101 */,};
此种枚举为类型安全的。枚举类型不能隐式地转换为整数;也无法与整数数值做比较。 (表示式 Enumeration::Val4 == 101 会触发编译期错误)。

#include <iostream>
using namespace std;

enum class Enumeration1
{
    Val1, // 0
    Val2, // 1
    Val3 = 100,
    Val4 /* = 101 */
};

// 指定类型
enum class Enumeration2:long {val1,val2=100,val3}; // val2=100.000400 出错

int main(int argc, char** argv)
{
    Enumeration1 my=Enumeration1::Val3;
    cout<<static_cast<int>(my)<<endl;

    cout<<static_cast<double>(Enumeration2::val2)<<endl;
    return 0;
}

免责声明:文章转载自《c++11 强类型枚举 enum class》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JTW(Json Web Token)java中abstract的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java switch 枚举

Switch中能够使用int。byte。short,char,Enum,String。当中Enum为1.5之后新增特性,String为java8新增特性。本文介绍怎样在Switch中使用Enum类型。 在swtich中使用enum。不同于传统switch的地方主要在两个显著的、非细节方面。 案例: switch (UserAgent.FIREFOX)...

USB开发笔记

USB方向: 由于主机是唯一主控者,因此OUT是主机到设备,IN是设备到主机,FX2的术语采用这个约定     USB设备枚举: 每个USB设备内部都有一个设备描述表,表中包含了设备全部要求和特性。USB设备插入主机后,主机会执行认证程序(设备枚举) ① 使用预设地址0取得设备描述符 ② 设定设备新地址 ③ 使用新地址取得设备描述符 ④ 取得...

java枚举类型

public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样....

java~使用枚举来实现接口的多态

java的enum类型,与C#不一样,它就是一个类,它可以实现接口,并且,可以通过的不同的枚举值来实现一个接口,这就是枚举的多态性。 下面的例子,在Hello接口有方法print,在枚举Strategy中,通过不同的枚举值分别实现了Hello接口,如下代码 enum Strategy implements Hello { CHINA()...

C语言 枚举类型

https://www.runoob.com/cprogramming/c-enum.html C enum(枚举) 枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,……}; 接下来我们举个例子,比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个...

C#枚举(一)使用总结以及扩展类分享

0.介绍 枚举是一组命名常量,其基础类型为任意整型。 如果没有显式声明基础类型, 则为Int32 在实际开发过程中,枚举的使用可以让代码更加清晰且优雅。 最近在对枚举的使用进行了一些总结与整理,也发现了一些很有意思的知识盲区。 接下来先简单为大家介绍枚举在开发过程中的常用内容以及扩展类的分享。如果喜欢直接看代码的可以查看最后的样例源码。 1. 参考资料 官...