C++11:强类型枚举(enum)

// C++11之前的enum类型是继承C的,不温不火;
// C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮
// 使用过QT 的都知道,早就应该这么做了,用的非常爽!!

// 一、C中enum类型的局限
// 1、非强类型作用域

enum type1{a, b, c};
enum type2{a, d, e};

//问题来了,两种枚举类型都有a枚举常量,并且作用域同样,发生了冲突

//2、同意隐式类型转换

if(type1::a == type2::d){;}

//两种不同enum常量比較没有实际意义,可是编译器是先将enum常量转换为int类型后,再比較的,不会报错

// 3、占用存储空间极其符号不确定

enum type3{a=1, b=0xFFFFFFFFFLL};
cout<<sizeof(type3::a)<<endl;//可能为8,视编译器而定,由其对齐字长决定的
cout<<type3::b<<endl;//输出大小不定,可能为0

//问题来了,存储大小和符号都有未定的因素

// 二、C++11强类型enum类型

//语法:

enum class type4:type{a, b, c};//加class,具名,指定底层类型type
enum class type5{a, b, c};//不指定底层类型

//特点及使用方法:
// 1、强作用域

type4 t = type4::a; //必须指定强类型名称
type4 p = a;        //错误

//2、不可隐式转换

if(t<type4::b);                   //同一个enum类型比較,能够
if(t>type5::b);                   //非同一个enum类型,不能隐式转换为int等值,不嗯呢该比較
if((int)t > (int)type5::b)        //强制类型转换,能够通过

//3、能够指定底层类型

enum class type6:char{a=1, b=2};
enum class type7:unsigned int{a=0xFFFFFFFF};

//既能够节省空间,又能够指定符号

//三、C++11是兼容并拓展了C enum类型的

enum type8:char{a=1, b=2};
type8 t =a;

//拓展并兼容C enum类型
时间: 2024-10-31 11:30:46

C++11:强类型枚举(enum)的相关文章

c++11 强类型枚举 enum class

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

Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举

一朋友在微信朋友圈晒了张照片,随手点开大图,带着欣赏的眼光扫了下,恩,几个月不见,又漂亮了...咦?等等,她戴的这是什么?酷炫的造型!金属边框!微型摄像头!这不是传说中的谷歌眼镜么?土豪啊,还好我们已经是朋友了...我先给了她一个赞,然后直奔主题,霸气回复道:我过几天去找你,你戴的是谷歌眼镜吧,哼哼小样,不想死的话...就让我...摸一下下可以么,我不奢求戴,摸一下就满足了...(哎,丢人啊). ------------------- 在cocos2dx 3.0的文档里有这么一句话:以 k 开头

c++11 强类型枚举

c++11 强类型枚举 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vector> #include <map> // C++ 11引入了一种新的枚举类型,即"枚举类",又称"强类型枚举".声明请类型枚举非常简单,只需要在enum后加上使用class或struct. enum Old{Yes, No};

C++11 之 scoped enum

  C++11 枚举类型是“域化的” (scoped enum),相比 C++98 枚举类型的“非域化” (unscoped enum),具有如下优点: 1  命名空间污染  一般来说,声明在花括号内的名字,其可见性限制在由花括号定义的作用域内,但是非域化枚举 (unscoped enum) 却是例外 enum Color { black, white, red }; // black, white, red are in same scope as Color auto white = fal

poj1753 Flip Game(枚举Enum+dfs)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1753 Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the o

c# 枚举enum

1 定义枚举 enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 默认情况下,枚举中的每个元素的基础类型的值是int,如果不指定值,则其值以1递增;Days.Sunday 的值为 0,Days.Monday 的值为 1,依此类推. public enum TimeOfDay { Moning=0; AfterNoon=1; Evening=2; } 使用枚举: public string ge

poj2965 The Pilots Brothers&#39; refrigerator(直接计算或枚举Enum+dfs)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=2965 Description The game "The Pilots Brothers: following the stripy elephant" has a quest where a player needs to open a refrigerator. There are 16 handles

C++和Java中枚举enum的用法

在C++和java中都有枚举enum这个关键字,但是它们之间又不太一样.对于C++来说,枚举是一系列命名了的整型常量,而且从枚举值转化为对应的整型值是在内部进行的.而对于Java来说,枚举更像一个类的命名的实例,你可以自定义枚举的成员,枚举值转化为对应的整型值是再外部进行的.下面以我之前的一篇博客8.1 Implement Blackjack 实现21点纸牌来说明,里面有一个扑克牌花色的枚举类: // C++ defination enum Suit {Club, Diamond, Heart,

Java 语法 索引 ----- 枚举(Enum)

enum Speed { STOP, SLOW, NORMAL, FAST } Speed s = Speed.SLOW; switch(s) { case SLOW: break; } 参考文献: Java Quick Syntax Reference by Mikael Olsson Java 语法 索引 ----- 枚举(Enum)