c – 什么是enum课程,我为什么要关心?

c – 什么是enum课程,我为什么要关心?,第1张

概述对于一个从未写过C 11系列的人,以及目前没有机会用C 11编程的人,你能用一个简短的段落告诉我: 什么是“枚举类”,为什么我们需要它? 枚举类称为范围枚举.它可以防止使用枚举器的名称污染枚举的名称空间. 在C 03中,您可以通过将枚举放在专用类中来有效地完成相同的 *** 作.也许这是语法的来源,这有点令人困惑. 另一个区别是这种类型的枚举器不会隐式转换为int(static_cast< int>是必需 对于一个从未写过C 11系列的人,以及目前没有机会用C 11编程的人,你能用一个简短的段落告诉我:

什么是“枚举类”,为什么我们需要它?

解决方法 枚举类称为范围枚举.它可以防止使用枚举器的名称污染枚举的名称空间.

在C 03中,您可以通过将枚举放在专用类中来有效地完成相同的 *** 作.也许这是语法的来源,这有点令人困惑.

另一个区别是这种类型的枚举器不会隐式转换为int(static_cast< int>是必需的).这可能很少需要,但它使得使用enum类型的int参数的函数重载是安全的.您可以确定不会意外调用int.或者您可以使用专用的运算符函数定义伪积分类型,并确保内置运算符不会干扰.

令人讨厌的是,这两个不相关的差异来自同一个包,并且您无法获得没有隐式转换的无范围枚举,但通常两个更改都是Good Things,而枚举类在C 11中是一个很好的默认实践.

编辑:范围枚举定义如下:

enum class duck { huey,dewey,louIE };

并且必须与范围解析运算符一起使用::像这样:

duck culprit = duck::huey; // or "auto culprit" to avoID redundancy

请注意,::运算符也适用于C 03未编组的枚举,因此即使第一行缺少类,上面的第二行也可以工作.

这可能是过多的细节,但如果前向声明枚举类型,则类不会进入详细类型说明符,如

voID quack( enum duck whom ); // not "enum class"

但是,在C 11中有一个new构造,即opaque-enum-declaration,它包含class关键字并定义一个完整的类型.

enum duck; // duck is declared as incomplete typeenum class duck; // duck is Now complete type; underlying type defaults to int

关键字struct可以替代没有语义差异的类.

总结

以上是内存溢出为你收集整理的c – 什么是enum课程,我为什么要关心?全部内容,希望文章能够帮你解决c – 什么是enum课程,我为什么要关心?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1235694.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存