初识c++(18)之枚举(enum)、枚举类(enum class/struct)、枚举作为类的成员变量

这篇博客介绍了C++中的枚举类型,包括基础的enum,增强了安全性的enum class(enum struct),以及枚举作为类的成员变量的使用。通过代码示例展示了enum class如何限定枚举值的访问,并指定了底层类型。同时,提到了将枚举作为类成员时的一个令人惊讶的操作,但未解释其原理,邀请读者留言探讨。
部署运行你感兴趣的模型镜像

enum

关于枚举一些基础的认识我就不啰嗦了,这里只写我见到的比较有意思的做法。

对枚举类型的讨论主要都是在作用于上。我就什么也不说都在下面的代码里:

#include<iostream>
using namespace std;

int main(){
	enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
	cout << Sun << endl;
	cout << week::Sun << endl;
	int Sun;//这句是错误的,因为枚举类型已经占用了Sun这个关键字啦,不能再使用了 
	return 0;
}

enum class

enum class (enum struct)这两种写法是等效的。上面的写法的缺点就是我们定义的枚举类型并没有将其内容保护起来,可以在外部随意调用,因此c++11就出现了enum class这种枚举类。

还是都在代码里:

#include<iostream>
using namespace std;



int main(){
	enum class week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
	enum class week1:unsigned int {Sun, Mon, Tue, Wed, Thu, Fri, Sat};//指定枚举的底层类型 
	cout << static_cast<int>(week::Sun) << endl;
	int Sun;//这句话是对的,enum class解决了域的问题 
	return 0;
}

解释:

---对枚举内容的引用,必须加上域名week::Sun,这样增加了安全性。

---enum class week1:unsigned int {Sun, Mon, Tue, Wed, Thu, Fri, Sat};可以指定枚举类型的底层类型。

---static_cast<int>(week::Sun)必须进行显性转换。

 枚举作为类的成员变量

这是偶然得到的例子:

#include<iostream>
using namespace std;

template<typename T>
class V{
	public:	
	 enum { val = sizeof(T) };
};

int main(){

	cout << V<int>::val << endl;
	return 0;
}

结果:

4

这个操作也是让我瞠目结舌,我也不知道,这样操作的道理是什么,只知道可以这样用,如果你知道请给我留言。

 

您可能感兴趣的与本文相关的镜像

ComfyUI

ComfyUI

AI应用
ComfyUI

ComfyUI是一款易于上手的工作流设计工具,具有以下特点:基于工作流节点设计,可视化工作流搭建,快速切换工作流,对显存占用小,速度快,支持多种插件,如ADetailer、Controlnet和AnimateDIFF等

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值