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

Sno*_*ish 7 c++ int enums

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

int state;
Run Code Online (Sandbox Code Playgroud)

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

switch (state)
{
case One:
    dosomething();
    break;
case Two:
    dosomething();
    break;
case Three:
    dosomething();
    break;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Fil*_*erg 12

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

所以这是使用它的一种非常好的方式,它使您的代码可读和易懂.

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

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

请考虑一下:

switch (operationState)
{
    case Waiting:
        dosomething();
        break;
    case Running:
        dosomething();
        break;
    case Ended:
        dosomething();
        break;
}
Run Code Online (Sandbox Code Playgroud)

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

switch (iState)
{
    case 997:
        dosomething();
        break;
    case 998:
        dosomething();
        break;
    case 999:
        dosomething();
        break;
}
Run Code Online (Sandbox Code Playgroud)

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


tem*_*def 7

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

state = 137; // Error!  Can't do this assignment without a cast.
Run Code Online (Sandbox Code Playgroud)

通常,使用类型系统对您有利.如果它是一个int,那就把它变成一个int.如果它是枚举类型,请将其设为枚举类型.