繁体   English   中英

以下声明之间的区别?

[英]Difference between the following declarations?

我有枚举类型,颜色:

enum colors {green, red, blue};

colors mycolors=red是否与int yourcolors=red相同,并且每个枚举数的类型是否为int 两者的值都为1,对吧?

谢谢!

我只想发布一些代码片段来证明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 classenum

关于“为什么不只是int (或long或...)之后的enum ”的问题,请考虑运算符重载。 那就是++ colors(green) == 1一定不正确。 确认以下问题 :对于普通enum可能会发生运算符重载; 此问题以及已接受的答案,以了解如何避免在“枚举类”的重载运算符中进行强制转换。

最后要记住, enum的用法(如果合理使用)会提高代码的可读性。

  • 我认为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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM