以下声明之间的区别?

时间:2017-05-06 22:18:44

标签: c++

我有类型的颜色:

enum colors {green, red, blue};

colors mycolors=redint yourcolors=red相同,是每个枚举器int的类型吗?两者的值都是1,对吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我只想发布一些代码片段来证明Jason Lang和Kerrek SB的评论:

#include <iostream>
#include  <typeinfo>
enum colors {green, red, blue};

int main()
{   
    colors mycolors=red;
    int yourcolors=red;
    if (mycolors == yourcolors)
        std::cout << "same values" << std::endl;

    if (typeid(mycolors) != typeid(yourcolors))
        std::cout << "not the same types" << std::endl;

    return 0;
}

运行此代码将进入以下控制台输出:

same values
not the same types

另外(正如Daniel Kamil Kozar所提到的)有enum class(只有C ++ 11及更高版本!)。有关enum class优先于enum的原因的详细信息,请参阅this Question

关于'为什么enum不仅仅是int s(或long s或...)之后的问题,只需考虑运算符重载。那是++ colors(green) == 1一定不是真的。 确认this Question可以对普通enumthis question and the accepted answer进行运算符重载,以了解如何避免在“枚举类”的重载运算符中进行转换。

最后请记住enum s的使用 - 如果使用合理 - 可以提高代码的可读性。

答案 1 :(得分:1)

  • 我认为enum似乎更加类型安全。您可以int yourcolors=red,但不能colors mycolors=1
  • 当我调试枚举使用时很有帮助。它显示了枚举名称 而不是它的价值。
  • 枚举值不是左值。所以,当你传递它们时 引用,不使用静态内存。这几乎就像你一样 将计算值作为文字传递。
enum KEYS
{
    UP,
    RIGHT,
    DOWN,
    LEFT
};

void (KEYS select)
{
    switch (select)
    {
        case UP:
        case RIGHT:
        case DOWN:
        case LEFT: break;
        default: exit(1);
    }
}
相关问题