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

标签 c++ enums

假设我们有一个 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.clearstd::string 是一个类型,所以你不能在它上面使用 . 。你在一个类的 instance 上使用 .

不幸的是,枚举是神奇的,所以类比就到此为止了。因为有了一个类,你可以做 std::string::clear 来获取一个指向成员函数的指针,但是在 C++03 中,Days::Sunday 是无效的。 (这是可悲的)。这是因为 C++(在某种程度上)与 C 向后兼容,并且 C 没有命名空间,因此枚举必须在全局命名空间中。所以语法很简单:

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

幸运的是,Mike Seymour观察到这已在 C++11 中得到解决。将 enum 更改为 enum class 并获得自己的范围;所以 Days::Sunday 不仅有效,而且是访问 Sunday唯一 方式。快乐的时光!

关于c++ - 如何在 C++ 中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12183008/

相关文章:

Java 8 使用枚举的方法

swift - 将字符串添加到错误枚举以传递给 Controller

c++ - 重载新运算符 : How the size will be passed?

ios - 现在如何在 RealmSwift 4.0 更新中使用枚举?

java - 具有属性的 UML 建模枚举

java - 披萨课。添加一个名为 setOfToppings 的集合作为属性。使用Java

C++ 不需要的无限 while 循环

c++ - 查找同一年中两个日期之间的天数 (c++)

c++ - Qsort 基于 c 字符串中的列?

c++ - 将 int 数组转换为字符串的正确方法是什么?