将enum用作int是一个好习惯吗?

时间:2011-02-10 21:38:49

标签: c++ enums int

所以,我在课堂上有一个变量“state”。我想将它声明为一个整数,所以我可以保存一些if语句。

int state;

执行此操作的一种方法是声明枚举状态{One = 0,Two = 1,Three = 3},然后在switch语句中,它将变为:

switch (state)
{
case One:
    dosomething();
    break;
case Two:
    dosomething();
    break;
case Three:
    dosomething();
    break;
}

那么,使用像这样的枚举是一个好习惯吗? 有更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:12)

是的,这是一个很好的方法。你通常使用enums来让生活变得更轻松,许多不同的数字并没有真正告诉其他编码员什么都没有用。

因此,这是使用它的一种非常好的方式,它使您的代码可读且易于理解。

Altough正如@James McNellis所指出的那样,将你的枚举命名为“1,2,3,4”是一个坏主意,因为它没有表达它真正的作用。

但我怀疑这只是你身边的一个例子。

请考虑一下:

switch (operationState)
{
    case Waiting:
        dosomething();
        break;
    case Running:
        dosomething();
        break;
    case Ended:
        dosomething();
        break;
}

在这种情况下,“操作”是:等待,运行或结束,这使其可读和易懂。现在考虑没有枚举的方式:

switch (iState)
{
    case 997:
        dosomething();
        break;
    case 998:
        dosomething();
        break;
    case 999:
        dosomething();
        break;
}

997告诉你什么?绝对没什么!使用易读且易于理解的代码,让每个人的生活更轻松。

答案 1 :(得分:7)

如果您将state声明为State而不是int,那么您上面的所有代码也能正常运行。你可以在switch语句中使用它,为它赋值,与它进行比较等。在这里使用int确实没有任何好处,因为它基本上是“在源代码中”。您的变量不是整数。将它乘以或除以一个值,或者向左或向右移位是没有意义的。将变量标记为State可以更清楚地表明您确实持有多个值之一并阻止您犯下上述某些错误。此外,它为编译器提供了更好的诊断机会:

state = 137; // Error!  Can't do this assignment without a cast.

通常,使用类型系统对您有利。如果是int,请将其设为int。如果它是枚举类型,请将其设为枚举类型。

答案 2 :(得分:0)

在switch语句中使用可读状态名而不是数字,对我来说似乎很好。 而且我认为它也不会影响性能。

所以没有理由不使用枚举!