无法理解C++中的枚举,它们实际上是什么?

Oop*_*ser 1 c++ enums

我用C#编程的最后几年,现在我又回到了C++.在C#中,enums的行为如下:

enum myenum { a,b,c} 
myenum myinstance = myenum.a;
Run Code Online (Sandbox Code Playgroud)

所以我可以这样做:

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

myenum myinstance = myenum.a;
Run Code Online (Sandbox Code Playgroud)

一切都会好的.

在C++中它不能编译,而且我现在不能使用a(b或者c)作为类名或其他任何东西,它似乎写作:

enum myenum { a, b };
Run Code Online (Sandbox Code Playgroud)

与声明全局int变量相同:

int a =0, b=1;
Run Code Online (Sandbox Code Playgroud)

我不明白为什么C++的开发人员为枚举选择这种行为,以及枚举是什么?它是一种类型?或者只是编译器替换某些int声明的东西?

Tim*_*ine 7

enum class如果您有权访问C++ 11编译器,请使用s代替.这些也称为强类型枚举.

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

myenum myinstance = myenum::a;
Run Code Online (Sandbox Code Playgroud)

这有你期望的行为.

但请注意,它们不能隐式转换为int经典C++ enum.

最后的问题:C++枚举不同的类型,但遗憾的是它们可以隐式转换为int,并且正如您已经注意到的那样,它们没有自己的命名空间.这是该语言及其C传承的历史文物.我在这里描述的强类型枚举没有这些问题.

有关它们和一些背景的更多信息,请查看本文