当你必须将它们转换为整数时,枚举被用于像switch语句这样的东西有什么意义?
使用一些常量int不是更好吗?我想使用枚举,但演员使他们看起来很笨重。我以为它们本来就是彗星,但它们还是别的什么?
它们在C ++中是否具有相同的行为?
抱歉这个措辞严厉的问题,我的脑子已经油腻了。答案 0 :(得分:13)
枚举的全部内容是让您的代码更具可读性。它们不会被整合,因为它们是默认的整数。唯一的区别是,不是来回检查您可能拥有的int值,而是可以使用一组清晰的枚举来使代码更具可读性。
答案 1 :(得分:5)
枚举具有语义值,可帮助您更轻松地阅读代码。它们比仅使用常量值更有用,因为您可以将它们组合在一起。
将枚举视为命名一组相关常量值的方法。
答案 2 :(得分:3)
使用Enum
的主要好处是代码可读性。他们将一组逻辑值组合成人类可以(通常)比许多数字或const声明更快地理解的东西,分散在整个源文件中。
在处理诸如位Flags
和相关二进制操作之类的事情时,它们提供了很多价值。
答案 3 :(得分:2)
在C ++和C#
中打开枚举是完全合法的答案 4 :(得分:1)
枚举主要用于可读性和易于理解。在使用Facade设计模式时,它们非常有用。
答案 5 :(得分:1)
在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;
}
答案 6 :(得分:1)
在C#中,不需要强制转换为int。您可以使用:
switch (myEnumValue)
{
case MyEnum.ValueOne:
// Do stuff
break;
case MyEnum.ValueTwo:
// Do stuff
break;
default:
// Do stuff
break;
}
答案 7 :(得分:0)
除了可读性之外,您还可以获得增强的类型安全性(至少在C#中)。
在C#中,如果函数采用枚举,则无法将其传递给枚举范围之外的值。
答案 8 :(得分:0)
上述类型安全性和可读性优势带来了其他一些好处。
使用某些开发IDE(Visual Studio和其他)时,您可以在使用枚举时获得智能感知。例如,如果您使用枚举作为case语句的switch值,则在声明每个case时都会获得intellisense。
可维护性 - 您可以获得一个位置来更改与枚举成员对应的整数值。
答案 9 :(得分:0)
枚举的全部意义在于它们不是整数(尽管在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只使用了in而不是enums,那么这个错误就不会被捕获。