gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:28:00 25 4
gpt4 key购买 nike

假设我们有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com