我用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声明的东西?
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传承的历史文物.我在这里描述的强类型枚举没有这些问题.
有关它们和一些背景的更多信息,请查看本文
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |