最近几年我用C#编程,现在回到了C++。在C#中,枚举的行为如下:

enum myenum { a,b,c}
myenum myinstance = myenum.a;

所以我可以做这样的事情:
enum myenum { a,b,c}
enum myenum2 { a,b,c}

myenum myinstance = myenum.a;

一切都会好起来的。

在C++中,它不能编译,而且我现在不能使用a(或bc)作为类名或其他名称,这似乎是在写:
enum myenum { a, b };

与声明全局int变量相同:
int a =0, b=1;

我不明白为什么C++开发人员会为枚举选择这种类型的行为,什么是枚举?是类型吗?还是只是一些编译器用一些int声明替换的东西?

最佳答案

如果可以访问C++ 11编译器,请改用enum class。这些也称为强类型枚举。

enum class myenum { a,b,c};
enum class myenum2 { a,b,c};

myenum myinstance = myenum::a;

这具有您期望的行为。

但是请注意,它们不能像传统C++ int一样隐式转换为enum

对您的问题结尾:
C++枚举的不同类型,但不幸的是,它们可以隐式转换为int,并且正如您已经注意到的,它们没有自己的 namespace 。这是该语言及其C传统的历史产物。我在这里描述的强类型枚举没有这些问题。

有关它们和背景的更多信息,请查看this article

关于c++ - 无法理解C++中的枚举,它们实际上是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20730966/

10-11 22:43
查看更多