【C++】学习笔记九——枚举

本文详细介绍了C++中枚举(enum)的概念与用法,包括枚举的基本语法、枚举量的赋值方式及取值范围等内容,并通过实例说明如何在程序中合理使用枚举。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举

C++的enum提供类另一种创建符号常量的方式,这种方式可以代替const。它还允许定义新类型,但必须按严格的限制进行。使用enum的句法与使用结构相似。例如:

enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
  • spectrum是新类型的名称:spectrum被称为枚举(enumeration);
  • red、orange、yellow等作为符号常量,它们对用整数值0~7。这些常量叫作枚举量(enumerator)。

默认情况下,将整数值赋给枚举量,第一个枚举的值为0,第二个枚举的值为1,以此类推。

可以用枚举名来声明这种类型的变量:

spectrum band;

在不进行强制类型转换的情况下,只能讲定义枚举时使用的枚举量赋给这种枚举的变量:

band = blue;         //合法,blue是一个枚举量
band = 2000;         //不合法,2000不是一个枚举量

因此,spectrum变量受到限制,只有8个可能的值。

对于枚举,只定义了赋值运算符,而没有定义算术运算:

band = orange;        //合法
++band;               //不合法
band = orange + red;  //不合法

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

int color = blue;           //合法,枚举量提升为int类型
band = 3;                   //不合法,int不能转换为枚举量
color = 3 + red;            //合法,red转换为int类型

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

band = spectrum(3);

如果只打算使用常量,而不创建枚举类型的变量,则可以省略枚举类型的名称:

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

1. 设置枚举量的值

可以使用赋值运算符显式地设置枚举量的值:

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

在C++的早期版本中,只能将int值赋给枚举量,但这种限制取消了,但这种限制取消了,现在可以使用long,long long等。

2. 枚举的取值范围

每个枚举都有取值范围,通过强制类型转换,可以将取值范围中的任何整数值赋给枚举变量,即使这个值不是枚举值,例如:

enum bits{one = 1, two = 2, four = 4, eight = 8};
bits myflag;
myflag = bits(6);     //合法,虽然6不是枚举值,但是它位于枚举定义的取值范围内

取值范围的定义:首先要找出上限,需要知道枚举量的最大值M,则上限是大于M的最小的2的幂次减一。其次要计算下限,需要知道枚举量的最小值m,如果m0,则下限为0;否则与寻找上限的方式相同,但要加上负号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值