枚举(enum)

C++enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。例如:

enum spectrum {red,orange,yellow,green,blue,violet,indigo,ultraviolet};

在默认情况下,将整数值赋给枚举量,第一个枚举量的值为0,第二个枚举量的值为1,一次类推。可以通过显式地指定整数值来覆盖默认值。

注意:

(1)在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量。例如:

spectrum band:

band = blue;//valid,blue ia an spectrum

band = 2000;//invalid,2000 is an enumerator

(2)对于枚举,只定义了赋值操作符。具体的说,没有为枚举定义算术运算:

band = orange;//valid

++band;//not valid

band = orange + red;//not valid

(3)枚举量是整型,可被提升为int类型,但int类型不能自动转换为枚举类型:

int color = blue;//valid

band = 3;//not valid

color = 3 + red;//valid

(4)如果int值是有效的,则可以通过强制类型转换,将它赋给枚举变量:

band  = spectrum(3);//typecast 3 to type spectrum

但如果试图对一个不适当的值进行强制类型转换,将出现什么情况呢?结果是不确定的,这意味着这样做不会出错,但不能依赖得到的结果:

band spectrum(40005);

(5)设置枚举量的值

①可以使用赋值操作符来显式的设置枚举量的值,指定的值必须是整数

enum bits{one = 1,two = 2,four = 4,eight = 8};

②指定的值必须是整数。也可以只显式地定义其中一些枚举量的值

enum bigstep{first,second = 100,third};

这里,first在默认情况下为0.后面没有被初始化的枚举量的值将比其前面的枚举量大1。因此,third的值为101。

③可以创建多个值相同的枚举量

enum{zero,null = 0,one,numero_uno = 1};

其中,zero和null都为0,one和numero_uno都为1.

(6)在C++早起的版本中,只能将int值(或提升为int的值)赋给枚举量,不过这种限制已经被取消了,因此可以使用long类型的值。

(7)枚举的取值范围

最初,对于枚举来说,只有声明中指出的那些值是有效的。不过,C++现在通过强制类型转换,增加了可赋给枚举变量的合法值。每个枚举都有取值范围(range),通过强制类型转换,可以将取值范围中的任何整数赋给枚举变量,即使这个值不是枚举值。

enum bits{one = 1,two = 2,four = 4,eight = 8};

bits myflag;

myflag = bits(6)//其中6不是枚举值,但它位于枚举定义的取值范围内

取值范围的定义如下:

首先,要找出上限,需要知道枚举量的最大值。找到对于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。要计算下限,需要知道枚举量的最小值。如果它不小于0,则取值范围的下限位0;否则,采用与寻找上限方式相同的方式,但加上负号。例如,如果最小的枚举量为-6,而比它小的,最大的2的幂是-8(加上负号),因此下限为-7。

时间: 2024-10-21 05:08:53

枚举(enum)的相关文章

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' 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)

Lua 与C/C++ 交互系列:动态注册枚举enum到Lua Code中,在运行时在Lua Code中获取内省信息

在Lua 5.1 Reference Manual  对于Lua 值和类型的介绍.Lua是一个动态语言,在Lua中变量仅仅有值而没有类型.所以在Lua中的变量不需要声明.所以的值本身包含类型. 其实Lua 包含一种运行时类型识别,通过type()函数,可以在运行时获取值的类型. 信息来自: Lua 5.1 Reference Manual  Values and Types Lua is a dynamically typed language. This means that variable

mysql数据类型——枚举enum(‘F’,'M')

ENUM(“value1”,“value2”,...) 说明:枚举,列值可赋予值列表中的某个成员 允许的属性:除通用属性外无其他属性 缺省值:如果列可为NULL,则为NULL:如果列为NOTNULL,则为第一个枚举值 存储需求:对1到255个成员的枚举1个字节,对255到65535个成员的枚举2个字节 比较:不区分大小写(MySQL3.22.1版以前区分大小写) mysql数据类型--枚举enum('F','M')

枚举enum学习小记

参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社   1.枚举enum的用途浅例       写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等.       更常见的,打开一个文件可能有三种状态:input, output和append.

聊一聊Java的枚举enum

一. 什么是枚举 枚举是一种数据类型,具有集合的一些特点,可以存放多个元素,但存储对象有限且固定,枚举也有比较常见的使用场景,如我们需要表达性别(男.女),颜色(红.黄.蓝),星期(星期一.星期二...星期日),四季(春.夏.秋.冬),地理位置(东.西.南.北),方向(前.后.左.右)等,这些场景都非常适合枚举. 二. 定义枚举 java中使用enum来定义枚举,和class,interface具有同样的等级,(注意是enum,而不是Enum),定义枚举可以有两种情况 第一种:默认构造器(空构造

枚举Enum 的常用方法

一.枚举介绍 通常定义常量方法和枚举定义常量方法区别 public class State { public static final int ON = 1; public static final Int OFF= 0; } 第一.它不是类型安全的. 你必须确保是int,其次,你还要确保它的范围是0和1. 第二.不够直观. 很多时候你打印出来的时候,你只看到 1 和0 ,但其没有看到代码的人并不知道你的企图. 抛弃你所有旧的public static final常量 枚举是一种规范它规范了参数