枚举的意义是什么?

What is the point of enums?

本文关键字:是什么 枚举      更新时间:2023-10-16

当必须将枚举类型转换为整型时,将其用于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只接受整型而不接受枚举,那么这个错误将不会被捕获。