c++ - 在 C++ 中,如何使用枚举

假设我们有如下所示的enum:


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



我想创建这个 enum的实例并用适当的值初始化它,这样做:


Days day = Days.Saturday;



现在我想用现有的enum 值检查变量或者实例,所以我这样做:


if (day == Days.Saturday)


{


 std::cout<<"Ok its Saturday";


}



这给了我一个编译错误:

error : expected primary-expression before '. 'token

所以要说清楚,说:有什么区别:


if (day == Days.Saturday)//Causes compilation error




if (day == Saturday)



这两个实际引用的是什么,其中一个是确定的,一个导致编译错误?

时间:

这里代码是错误的:


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


Days day = Days.Saturday;


if (day == Days.Saturday)



因为 Days 不是作用域,也不是对象。 它是一个类型并且类型本身没有成员。 你所写的内容与 std::string.clear 相同。 std::string 是一个类型,因此不能在它的上使用 . 。 在类的实例上使用 .

不幸的是,枚举是神奇的,所以类比就停在那里。 由于使用类,你可以做 std::string::clear 来获得成员函数的指针,但在C++03中,Days::Sunday 是无效的。 ( 这是很难的) 这是因为 C++ 是( 有点) 背后的compatable,因这里C 没有命名空间,因这里枚举必须在全局命名空间。 因此,语法是简单的:


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


Days day = Saturday;


if (day == Saturday)



幸运的是,Mike 注意到这已经在C++11中。 将 enum 更改为 enum class 并且它得到自己的范围;所以 Days::Sunday 不仅有效,而且是唯一的访问 Sunday的方法。

...