第5条:用枚举表示状态、选项、状态码

C++11标准扩充了枚举的特性。

枚举只是一种常量命名方式。给常量取一个易懂的名字而已。

几种定义方式:

1、

  enum State {

    State1,  

    State2,  

    State3,  

  };

  enum State aState = State1;    //使用

2、

  enum State {

    State1,  

    State2,  

    State3,  

  };

  typedef enum State State;

  State aState = State1;     //使用

3、

  enum State : NSInteger {

    State1,  

    State2,  

    State3,  

  };     //使用“底层数据类型”来保存枚举类型的变量,这样做的好处是,可以“向前声明”(在.h文件中声明)枚举变量了。若不指定底层数据类型,则无法向前声明枚举类型,因为编译器不不清楚底层数据类型的大小,所以在用到此枚举类型时,也就不知道究竟该给变量分配多少空间了。

  enum State : NSInteger;   //向前声明

4、

enum State {

    State1 = 1,  

    State2,  

    State3,  

  };    //不使用编译器所分配的序号,手动指定枚举成员所对应的值。

5、

  enum State {

    State1 = 0,  

    State2 = 1 << 0,  

    State3 = 1 << 1,

    State3 = 1 << 2,  

  };  //通过“按位或操作符”来组合,还可以用“按位与操作符”来判断是否已启用某个选项。

例:

  enum State aState = State1 | State2;

  if (aState && State1) {

  }

6、

typedef NS_ENUM(NSUInteger, State){

    State1,  

    State2,  

    State3, 

};

//略:Foundation框架中定义了一些辅助的宏,用来指定用于保存枚举值的底层数据类型。这些宏具备向后兼容能力。

枚举类型在switch语句中的运用:

   注意:在处理枚举类型的switch语句中不要实现default分支。这样的话,加入新枚举之后,编译器就会警告提示开发者:swith语句并未处理所有枚举。

时间: 2024-10-05 13:29:39

第5条:用枚举表示状态、选项、状态码的相关文章

SQL Server 数据库状态选项

选项 1. single_user(单用户),multi_user(多用户),restricted_user(受限用户); 描述数据库的用户访问属性,它们互斥,设置其中任何一个选项就会取消对其它选项的设置 single_user模式的数据库每次只能有一个连接. restricted_user模式可以有多个连接,前提是这些用户要是被认为是‘合格’的如 sysadmin,dbcreator,dbowner. multi_user任何有效的用户都可以连接. 例子: alter database stu

[Effective JavaScript 笔记]第56条:避免不必要的状态

API有时被归为两类:有状态的和无状态的.无状态的API提供的函数或方法的行为只取决于输入,而与程序的状态改变无关.字符串的方法是无状态的.字符串的内容不能被修改,方法只取决于字符串的内容及传递给方法的参数.不管程序其他部分的情况,表达式"foo".toUpperCase()总是产生"FOO".相反,Date对象的方法却是有状态的.对于相同的Date对象调用toString方法会产生不同的结果,这取决于Date的各种set方法是否已经将Date的属性修改. 有状态的

Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态

by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确):  瞬时状态(transient):    不被session接管,且不存在数据库中的对象的状态,类似于新New一个对象  离线状态 (detached):    数据库中存在而不被session接管  持久化状态(persistent): 对象被session管理且数据库中存在此对象 1.2. 状态之间转换关系图 2 .状态转换以及Hibernate数据库执行过程详解:

POJ--3311--Hie with the Pie(暴力枚举+floyd)/(状态压缩DP+floyd)

简介 状态压缩入门,先说用暴力枚举的方法做的,再说状态压缩DP,对于刚开始学习状态压缩的同学,两者相互比较学习,可以明显看出两者区别,有利于对状态压缩DP的理解,提前说下,两者耗时是 157Ms和 0Ms . 题意 一披萨店员送披萨,从披萨店开始送给N个客户会给你一个(N+1)*(N+1)的矩阵,对于矩阵 g[i][j] 表示 i 处到 j 处所耗费的时间,0 代表披萨店,每条路径可以重复走. 问:店员从披萨店开始送完所有的披萨再返回店中的最短耗时.注意,出店就拿有 N 个披萨,不必重复返回店里

MATLAB学习(一)——状态好状态坏,自作自受

状态不好,学学MATLAB做做准备吧. 一.基本情况 1.1 书写 一行写不下? %可以加上三个小黑点(续行符)并按下回车键,然后接下去再写.例如 s=1-1/2+1/3-1/4+1/5-1/6+1/7-…- 1/8+1/9-1/10+1/11-1/12; 1.2 运算相关 不等于:~= 所以,非:~ 常用的矩阵运算: eye(size(A))   产生与A矩阵同阶的单位矩阵 zeros(m,n)         产生0矩阵 ones(m,n)         产生1矩阵 rand (m,n) 

管窥Android中的滑动条SeekBar的父类AbsSeekBar的源码

Android中的控件中有一类是ProgressBar,其子类中有一个是AbsSeekBar.相信有不少童鞋对这个拖动条的父类比较感兴趣吧!尤其是看到网易云音乐的进度条上面是可以处理播放与暂停事件,是不是很羡慕的哈~  俺在这里告诉大家,不用羡慕,看了我下面的代码分析,你也是可以做出那样的效果的哦.Let's go. 下面先给大家列表一下AbsSeekBar的成员变量有哪些. //当前的矩形 private final Rect mTempRect = new Rect(); //可以拖动的滑块

Ejb-有状态&amp;无状态SessionBean

1.    Ejb的分类 首先,企业级Bean分为三类: SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的.每当客户端请求时,容器就会选择一个SessionBean来为客户端服务.SessionBean可以直接访问数据库,但更多时候,它会通过EntityBean实现数据访问. Entity Bean是域模型对象(用来表示真实世界的实体),用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录

hibernate实体对象的三种状态:自由状态,持久状态,游离状态.

自由态与游离态的区别: 当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它 对应的记录,只是现在这个游离对象脱离了Hibernate的缓存管理,而自由对象不会在数据库中出现与它对应的数据记录 (1)自由状态(Transient) 特性: ①不在Session的缓存中,不与任何的Session实例相关联. ②在数据库中没有与之相对应的记录. (2)持久状态(Persistent) 特性 ①在Session

线程的基本概念、线程的基本状态以及状态之间的关 系

一个程序中可以有多条执行线索同时执行,一个线程就是程序中的一条执行线索,每 个线程上都关联有要执行的代码,即可以有多段程序代码同时运行, 每个程序至少 都有一个线程,即main方法执行的那个线程.如果只是一个cpu,它怎么能够同时执 行多段程序呢?这是从宏观上来看的,cpu一会执行a线索, 一会执行b线索,切换时 间很快,给人的感觉是a,b在同时执行,好比大家在同一个办公室上网,只有一条链 接到外部网线,其实,这条网线一会为a传数据, 一会为b传数据,由于切换时间很短 暂,所以,大家感觉都在同时

[Java并发编程]-线程的六种状态及其状态转换

转载请注明:http://blog.csdn.net/UniKylin/article/details/45050823 1.线程自身信息 线程运行的过程会产生很多信息,这些信息都保存在Thread类中的成员变量里面,常见的有: a.线程的ID是唯一标识getId() b.线程的名称:getName(),如果不设置线程名称默认为"Thread-xx" c.线程的优先级:getPriority,线程优先级从1-10,其中数字越大表示优先级别越高,同时获得JVM调度执行的可能性越大,JDK