How to use enums in C++

前端 未结 14 676
臣服心动
臣服心动 2020-12-04 04:30

Suppose we have an enum like the following:

enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};

I want to crea

14条回答
  •  感情败类
    2020-12-04 05:10

    This code is wrong:

    enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};
    Days day = Days.Saturday;
    if (day == Days.Saturday)
    

    Because Days is not a scope, nor object. It is a type. And Types themselves don't have members. What you wrote is the equivalent to std::string.clear. std::string is a type, so you can't use . on it. You use . on an instance of a class.

    Unfortunately, enums are magical and so the analogy stops there. Because with a class, you can do std::string::clear to get a pointer to the member function, but in C++03, Days::Sunday is invalid. (Which is sad). This is because C++ is (somewhat) backwards compatable with C, and C had no namespaces, so enumerations had to be in the global namespace. So the syntax is simply:

    enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};
    Days day = Saturday;
    if (day == Saturday)
    

    Fortunately, Mike Seymour observes that this has been addressed in C++11. Change enum to enum class and it gets its own scope; so Days::Sunday is not only valid, but is the only way to access Sunday. Happy days!

提交回复
热议问题