当前位置: 首页 > article >正文

c++之说_11|自定义类型 enum(枚举)与enumclass (c11新枚举)

至于枚举

会用就行 至少目前我感觉没什么太多问题

enum 被称为无作用域枚举  , enumclass / enumstruct  被称为有作用域枚举

看到了吧 语法规则  和 struct 差不多

只不过枚举成员 只是一个标志

它本质是数值

从上到下  下面的数根据上面的数 加 1

 也可以直接指定 数值

看下面的数  是上面数加1吧?

enum d: char

这个是什么?

有点像继承  但又不对

这个是什么  它可以指定枚举的内存使用的大小

我们知道枚举本质是数值 那么它的内存大小呢?

注意到没 一个是四字节  一个是一字节

至于为何叫无作用域

大概率是因为 内部成员没法重复的原因 


namespace Enum
{
	enum MyEnum1
	{
		a,b,c,d
	};
	enum MyEnum2
	{
		a=100 , b, c, d
	};


}

这样是错误的编译没法过

原因就是因为 enum MyEnum1  enum MyEnum2

内部的 成员标志重复了

namespace Enum
{
	enum MyEnum1
	{
		q,w,e,r
	};
	


}
enum MyEnum2
{
	q = 100, w, e, r
};

这样可以隔绝在名称空间中

这样是允许的

你说这不合理  但规则就是如此

所以c++引入了enumclass / enumstruct 有作用域枚举

namespace Enum
{
	enum MyEnum1
	{
		q,w,e,r
	};

}
enum MyEnum2
{
	q = 100, w, e, r
};


enum class MyEnumClass1
{
	q,w,e,r
	
	
};

enum class MyEnumClass2
{
	q, w, e, r
};

没有冲突

int main()
{
	MyEnumClass1 j;
	j = MyEnumClass1::q;

	Enum::MyEnum1 c = Enum::q;
	MyEnum2 k = q;
	int ki = k;//可以隐式转换
	//int ki1 = j;//不可以隐式转换
	int ki1 = static_cast<int>(j);//可以

	k = static_cast<MyEnum2>(101);

	return 0;
}

我们来看看调用

MyEnum2 k = q;

注意这个没有?

无作用域枚举  定义以后可以直接访问到成员 仿佛是全局变量一般

MyEnum2 k = q;
int ki = k;//可以隐式转换

无作用域枚举 可以隐式转换到数值型

但是数值型不能隐式转换到 枚举类型  必须使用强制转换

    k = static_cast<MyEnum2>(101);//MyEnum2::w

而有作用域枚举

访问必须使用作用域修饰符

MyEnumClass1 j;
j = MyEnumClass1::q;

不能隐式转换到数值型  需要使用强转

int ki1 = static_cast<int>(j);//可以

你会问  要是我用一个不存在于枚举里面的数 去强制转换为枚举会如何?

我也不知道  因为会直接等于 该值


http://www.kler.cn/a/234292.html

相关文章:

  • Python中异常处理小测验
  • UDP协议和TCP协议之间有什么具体区别?
  • 11张思维导图带你快速学习java
  • python装饰器的使用以及私有化
  • L10.【LeetCode笔记】回文链表
  • 什么是RAG? LangChain的RAG实践!
  • Apache网站部署
  • 应用层 HTTP协议(1)
  • 《动手学深度学习(PyTorch版)》笔记8.3
  • 【笔记】Helm-5 Chart模板指南-11 子chart和全局值
  • 学习之旅9------JavaScript面向对象编程(OOP)全面解析
  • 【数据分享】1929-2023年全球站点的逐日降水量数据(Shp\Excel\免费获取)
  • 13.Swift元组
  • C语言第二十二弹---指针(六)
  • LineageOS 线刷包 小米红米 Note 4 (Mido)
  • 从事机器视觉,笔记本电脑该如何选型
  • 基于JSP的网上购书系统
  • Avalonia 虚拟化
  • Golang的for循环变量和goroutine的陷阱,1.22版本的更新
  • 【Java万花筒】加速Java应用程序:探索性能优化的利器
  • python3创建虚拟环境venv
  • 猫头虎分享已解决Bug || Kubernetes Error: Pods ‘pod-name‘ Not Found
  • Go语言每日一练——链表篇(八)
  • 深入了解Redis:选择适用于你的场景的持久化方案
  • IAR报错:Error[Pa045]: function “halUartInit“ has no prototype
  • JVM 性能调优- 五种内存溢出(5)