枚举的意义是什么?
本文关键字:是什么 枚举 | 更新日期: 2023-09-27 18:13:36
当必须将枚举类型转换为整型时,将其用于switch语句之类的内容有什么意义?
使用几个const int不是更好吗?我想使用枚举,但它使它们看起来很笨拙。我以为它们是整型,但它们是别的东西?
它们在c++中有相同的行为吗?
不好意思,我脑子坏了。
枚举的全部意义在于使您的代码更具可读性。它们不会被强制转换为int型,因为它们在默认情况下是int型。唯一的区别是,您可以使用一组清晰的枚举,而不是来回检查可能拥有的int值,从而使代码更具可读性。
枚举具有语义值,可以帮助您的代码更易于阅读。它们比使用常量值本身更有用,因为你可以将它们组合在一起。
可以把enum看作是一组相关常数值的命名空间。
使用Enum
的主要好处是代码的可读性。它们将一组逻辑值分组为人类(通常)可以更快理解的东西,而不是分散在源文件中的大量数字或const声明。
它们在处理bit Flags
和相关的二进制操作时提供了很多价值。
在c++和c#中,打开enum是完全合法的
在c#中不需要强制转换为int类型。你可以使用:
switch (myEnumValue)
{
case MyEnum.ValueOne:
// Do stuff
break;
case MyEnum.ValueTwo:
// Do stuff
break;
default:
// Do stuff
break;
}
使用enum主要是为了便于阅读和理解。它们在使用Facade设计模式时非常有用。
在c++中,不需要强制转换为int,因此您可以使以下编译和工作良好:
enum e{
V1 = 0,
V2,
V3
};
int main()
{
e x = V1;
switch (x)
{
case V1:
break;
case V2:
break;
case V3:
break;
}
return 0;
}
除了可读性之外,还增强了类型安全性(至少在c#中是这样)。
在c#中,如果一个函数接受一个enum,你将不能传递一个枚举范围之外的值给它。
除了前面提到的类型安全性和可读性方面的好处之外,还有其他一些好处。
对于一些开发ide (Visual Studio和其他),在使用枚举时可以获得智能感知。例如,如果您使用enum作为case语句的开关值,则在声明每个case时将获得智能感知。
可维护性方面,您可以获得一个位置来更改与enum成员对应的整数值。
枚举的全部意义在于它们是而不是整型(尽管在c++中它们可以隐式地转换为整型;我不知道c#)。这为您提供了额外的类型安全性。例如,在c++中有:
enum open_type { open_read, open_write, open_readwrite, open_create };
enum exclusivity { exclusive, shared };
void open_file(char const* filename, opentype ot, exclusivity ex);
那么下面的代码会给你一个编译错误:
open_file("foo.txt", exclusive, open_write);
如果open_file只接受整型而不接受枚举,那么这个错误将不会被捕获。