C++ enum枚举的使用

一、enum在C++11的变化

从C++11开始,支持下面的enum形式

enum struct|class 名字 : 类型 { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... }	
enum class pet: unsigned int{ Dog, Cat, Monkey, Lion};

enum struct|class 名字 { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... }
enum class pet { Dog, Cat, Monkey, Lion};

enum 名字 { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... }				//最原始的定义方法
enum pet { Dog, Cat, Monkey, Lion};

声明的方法

enum struct|class 名字 ;	
enum class pet;

enum struct|class 名字 : 类型 ;
enum class pet: unsigned int;

二、实验

变化之后有什么好处呢?下面通过几个实验来说明一下。

实验一:枚举的访问

#include <iostream>
using namespace std;

enum class pet: unsigned int {Dog, Cat, Monkey, Lion};

int main()
{
	pet ZooPet;
	
	ZooPet = pet::Dog;
	
	return 0;
}

结论:
在赋值的时候,必须加上pet作用域。虽然我们定义enum时候没有使用到namespace,但编译器应该在编译时候帮我们加上了。
与传统的枚举定义相比,我们可以显示的指定枚举的类型,不用编译器默认指定。

实验二:多个枚举成员重名

首先,使用旧版的枚举

#include <iostream>
using namespace std;

enum pet1 {Dog, Cat, Monkey, Lion};
enum pet2 {Dog, Cat, Monkey, Lion};

int main()
{	
	pet1 Pet1;
	pet2 Pet2;
	
	Pet1 = Dog;
	Pet2 = Cat;
	
	return 0;
}

在这里插入图片描述
编译器不通过,出现重复定义。

然后,使用C++11版本的枚举

#include <iostream>
using namespace std;

enum class pet1 {Dog, Cat, Monkey, Lion};
enum class pet2 {Dog, Cat, Monkey, Lion};

int main()
{	
	pet1 Pet1;
	pet2 Pet2;
	
	Pet1 = pet1::Dog;
	Pet2 = pet2::Cat;
	
	return 0;
}

编译器通过了,因为编译器能区分不同定义域里的成员。

结论:
在使用枚举的时候,尽量使用C++11所支持的枚举。现在C++11已经不算是什么新版本的了,很多项目都是C++11或以上的版本。

三、最后

c++11里有很多奇奇怪怪的特性,其中必定隐含了它的道理,将它们捋清捋清,便是C++学习者所要经历的。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值