如果一个变量需要几种可能存在的值,那么就可以被定义为枚举类型。枚举在C/C++中,是一个被命名的整型常数的集合。
eg:
enum open_modes{input=1,output,append};在open_modes枚举中,input、output、append称为枚举子,它们限定了open_modes所定义对象的取值范围。 下面定义一个open_file函数
bool open_file(string file_name,open_modes om); 例如: open_file("abc.txt",1);//error,传递的为非枚举值 open_file("abc.txt",input);//ok,第二个参数应该是input、output、append中的一个 第二种方式,即先声明,后定义 enum box b;//先声明enum box类型的变量b enum {pencil,pen}box,box2//定义enum box类型对于枚举变量中的枚举元素,系统是按照常量来处理的,故叫枚举常量,它们是不能进行普通的算术赋值的。
pencil=1;//error //但是可以在声明的时候赋值 enum box{pencil=1,pen=2}; 需要注意的是,如果不进行元素赋值操作,那么元素将会被系统自动从0开始递增赋值操作。如果只给第一个元素进行了赋值,那么第二个元素的值就是第一个元素的值再加1 enum box{pencil=3,pen};//此时pen=4 初始化可以赋负数,以后的元素仍然是依次加1 enum box{pencil=-3,pen};//此时pen=4再如:
enum day{S=7,M=0,T,W,T,F,S};//7,0,1,2,3,4,5,6 同一枚举中枚举子的取值不需要唯一,这主要用于分类 enum some_big_cities{ Guangzhou=1, Shenzhen=1, Hongkong=1, Shanghai=2, Beijing=3, Tianjing=3 }; 一个枚举类型的sizeof就是某个能够容纳其范围的整型的sizeof,而且不会大于sizeof(int),除非某个枚举子的值不能用int或者unsigned int来表示。在32位机器中,sizeof(int)=4C++枚举类型继承于C语言,C++枚举也有缺点,最显著的缺点在于作用域,在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型
int main(){ enum box1{pencil,pen};//定义enum box1类型 box1 b;//声明一个enum box1类型的变量b b=pencil;//ok b=box::pencil;//错误,vc6.0中提示,pencil不是一个box1 //的成员,vc2010是一个警告错误,限定名中使用了枚举,"main::box1" enum box2{pencil,pen};//error,重定义,以前的定义时“枚举数” //由此可知,pencil和pen的作用域和box1的作用域是相同的 return 0; }