当枚举需要转换为整数时,使用枚举在switch语句中有何意义?
使用一些const int是否更好?我想使用枚举,但是强制转换使它们看起来笨重。我以为它们应该是int类型,但它们是其他什么东西吗?
C ++中它们的行为相同吗?
对不起,我的问题表述得不好,我的大脑已经崩溃了。
当枚举需要转换为整数时,使用枚举在switch语句中有何意义?
使用一些const int是否更好?我想使用枚举,但是强制转换使它们看起来笨重。我以为它们应该是int类型,但它们是其他什么东西吗?
C ++中它们的行为相同吗?
对不起,我的问题表述得不好,我的大脑已经崩溃了。
枚举的整个目的就是使您的代码更易读。它们没有转换为 int,因为它们默认就是 int。唯一的区别是,您不必来回检查可能拥有的 int 值,而是可以使用一组明确的枚举来使代码更易读。
public enum Foo:byte { Bar }
- Ade Stringerint
类型;它们只能隐式转换成 int
。你不能将一个 int
直接赋值给一个枚举类型而不进行强制类型转换,使用枚举类型来实例化模板会得到与使用 int
不同的实例,typeid(v).name()
也会返回不同的字符串等等。 - James Kanze枚举类型具有语义价值,有助于使您的代码更易阅读。它们比仅使用常量值本身要更实用,因为您可以将它们组合在一起。
将枚举视为对一组相关常量值进行命名空间分组的方法。
枚举
的主要好处在于提高代码可读性。将一组逻辑值分组成人类通常比散布在源文件中的数字或const声明更易于理解的内容。标志
和相关二进制操作时,它们提供了很多价值。switch (myEnumValue)
{
case MyEnum.ValueOne:
// Do stuff
break;
case MyEnum.ValueTwo:
// Do stuff
break;
default:
// Do stuff
break;
}
myEnumValue
是一个整数...那么我相信你必须在C#中强制转换其中的一个。 - mpenenum e{
V1 = 0,
V2,
V3
};
int main()
{
e x = V1;
switch (x)
{
case V1:
break;
case V2:
break;
case V3:
break;
}
return 0;
}
枚举主要用于提高可读性和易于理解性。当使用Facade设计模式时,它们非常有用。
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);
除了上述的类型安全和可读性优势外,还有其他几个好处。
在一些开发IDE(如Visual Studio等)中,使用枚举时可以获得智能感知。例如,如果您将枚举用作case语句的switch值,则在声明每个case时会获得智能感知。
从可维护性的角度来看,您可以获得一个单一的位置来更改与枚举成员对应的整数值。