我来说说枚举类型

枚举enum

枚举相当于宏定义一般,可以用来替代const#define,但是枚举存在变量,数值可以修改。以下通过实例作简要介绍:

eg:

enum week_Days { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};




两点说明:


一、week_Days是一个新类型名,即TypeName,可以用于创建枚举变量;


二、花括号里边的是 枚举常量,对应整数值默认为0123456”类似数组下标。


也就是指Sunday”与“0”等价,Monday”与“1”等价,Tuesday”与“2”等价……

不过枚举常量的数值是可以用户自定义设置的,进而修改枚举的取值范围,如:

enum week_Days { Sunday,Monday,Tuesday=10,Wednesday,Thursday,Friday=1,Saturday};



那么对应整数值则为0110111212”。

枚举常量的数值大小原则:

第一个枚举常量未被初始化时,其数值为0

其它未被初始化的枚举常量,其数值比前一个枚举常量大1

 



易错警示:

枚举类型的变量的运算符有且仅有 赋值运算符,且赋值结果只能是枚举列表里的枚举常量。

不过由于存在类型转换,有两点说明:


I 隐式类型转换:

由于枚举量都是整数,故可以隐式转为int类型,如 “int n = Sunday;”是没有问题的,但反过来不行,如“week_Days  day = 100;”就是错误的,因为“100”不曾存在于枚举列表之内,而枚举创建的变量只能够以同类型的枚举常量来初始化,且默认是枚举列表里的枚举常量。


II 强制类型转换:

可以通过强制类型转换,把不在枚举列表中的常量赋值给枚举创建的变量,如


week_Days day1 = weekday(-1);
week_Days day2 = weekday(100);




C++11的新东西:作用域内枚举

这就好似与在.h文件里使用namespace来限定一样,为了避免重名冲突导致的编译错误或警告,枚举类型可以通过使用classstruct来限定枚举量,进而避免了命名冲突问题。

eg:

enum week_Days { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
enum weekday { Monday,Tuesday,Wednesday,Thursday,Friday};
enum weekend { Sunday,Saturday};




那么 int day = Monday”就是不正确的,产生了二义性,因为编译器是无法判断Mondayweek_Days类型还是weekday类型,故需要借助 作用域。

修改之:


enum class week_Days { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
enum class weekday { Monday,Tuesday,Wednesday,Thursday,Friday};
enum class weekend { Sunday,Saturday};



那么就可以轻易区分了——


“ int day = week_Days::Monday”有别于 “ int day = weekday::Monday”
“ int day = week_Days::Sunday”有别于“ int day = weekend::Sunday”。



待更,持续更新中……

你可能感兴趣的:(#,数据类型)