c++新增枚举类型

文章讨论了C语言中枚举类型的局限性,尤其是在直接赋值数字可能导致的问题。C++通过引入新的枚举类型解决了这个问题,确保枚举常量与数字分离,提高了类型安全性。

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

传统的枚举类型:  

枚举类型在C语言中经常使用到的。语法: enum 类型名 {枚举常量};

但是,C语言中的枚举类型存在一定的缺陷

#include <stdio.h>
#include <stdlib.h>

// 定义枚举类型
typedef  enum  _NUMBER { ONE, TWO, THREE, FOUR, FIVE }NUB;

int main(void) {

	//  使用枚举类型进行定义变量
	NUB n = ONE;  // 定义枚举的量

	n = 2;   //  在C语言程序中可以直接将数字赋值给枚举变量

	n = 5;

	system("pause");

	return 0;
}

代码分析: 

1.  代码中我们定义了一个枚举的常量n,我们可以使用声明的枚举常量给它赋值,这样当然没有什么问题。

2.  但是,代码中我们除了1中的赋值方式,还可以直接使用数字对n进行赋值。 这就会出现问题。

3.  因为我们在枚举中定义的枚举常量其实本质就是数字,所以说给枚举定义的量赋值给数字是没有问题的。 

4.  那么问题出现在哪里? 

    其实很简单, 代码中ONE -> 0, TWO -> 1, THREE -> 2, FOUR -> 3, FIVE -> 4。你会发现我们定义的枚举常量范围是0-4

    如果我们使用常量的名称去赋值n自然不会出问题,因为名称只定义了那么几个。如果使用数字去赋值给n,就会出现问题了,使用数字赋值的时候,是没有限定的,我们很容易就赋值给超出枚举常量的范围之外的数字。

 如代码中,我们将5赋值给n不会出现问题,但是5已经超出了我们定义的范围。

之所以不出现问题,是因为枚举其实说白了就是整数,你将一个只能整数赋值给它编译器不会认为是错误的。 

 

为了防止上面的错误,c++提供了新的枚举类型,这种枚举类型将我们定义的常量与数字分割开了。 

 

c++新增的枚举类型 

其实就是定义成一个类了,语法:   enum class _NUM{ONE,TWO,THREE}; 

 

代码分析:   

 1.   上面就使用了c++新增的枚举,我们前面说到了这个枚举并不与数字互通,也就是说我们不能直接将数字赋值给枚举定义的量,而且不能与数字进行比较。(也就是这种情况下,枚举常量和数字是不互通的) ,这就解决了之前的问题

 2.    要想使用新增的枚举常量需要在常量前面加上类的名称,例如,代码中想要使用ONE,就得是_NUMBER::ONE,无论是赋值还是使用都需要这样使用。

 3.   虽然枚举常量不与数字互通,但是我们可以对它进行类型强转。 例如: (int)_NUMBER::ONE其实就是0。代码中我们在数字比较的时候使用到了类型强制转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值