数据类型 / 枚举 / 编程语言 · 2023年 10月 11日 0

枚举

32 次浏览

Enum就像数数,数到几个是几个。

不同语言的枚举

  • C/C++枚举本质是整型,在Java中是对象,而非基本类型,可通过instanceof Object判断是否是对象类型。C#与Java不同,枚举是值类型。
  • C语言更纯粹,枚举绝对当成整数,可以对枚举变量用整数赋值,甚至可以做自增运算。C++做了一定约束,可以将枚举变量赋值给整数,但不能反过来,另外不允许自增之类的运算。从使用上,C#必须带上枚举类型名,C/C++完全不用顾忌。
  • Java语言的枚举更严格,因为它是对象,绝对不能和整数有任何直接来往。话说面向对象语言应该更早引入枚举,事实上Java 5.0版本才引入枚举类型。
  • 大部分脚本语言都对于枚举没太大兴趣,一方面枚举的静态类型不符合脚本动态类型。当然,万事不必然,Python 3.4之后和Javascript ES6之后也支援枚举。
  • Ada是一门对枚举数值范围支持很好的语言,也许源自它本身是安全设计。
  • C#枚举不能定义在方法里面,可以放在命名空间或者类里面。C/C++允许在函数中定义枚举。

枚举的内部类型

  • C/C++常规枚举默认类型为整型,具体取决于实现。C++11对于作用域内枚举引入了类型控制,默认是int, 可指定枚举使用的类型,比如short或者long. 形如:enum class : short Weekday { Monday, Tuesday };