Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2035431
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2008-10-13 12:44:46

    在C中枚举成员被当成了一组常量,跟你用const或者define 定义的常量一样使用,只是这是一种新的类型,在跟整形作比较或者赋值的时候需要强
制类型转换。
它主要使用在switch……case 这样的结构中,使用enum的主要目的是提高程序可维护性,提高了程序的可读性。当然可以用const代替,可是
当要定义一组常量时,使用
enum更方便,enum提供批量定义常量的功能。

       enumC++中的用法,跟C还是有很大的不同的。
       假如有定义 enum tag{one ,two};
       这样赋值,int t=tag()||tag(one); 当然了结果是0,类似于类中的默认构造函数;
    如果这样定义
enum tag{one=1,two};
这个时候tag()会是多少呢?结果用VC++2005,得出的结果是0,可是如果定义tag  t1 , 而不给t1赋值,那么t1的值就
1,编译器自动初始化该变量。

     如果使用的是
MinGW编译的结果却都是0这个编译器的支持还不一样。

        接着用Dev-C++编译,tag()的结果是0,而t1却是一个很奇怪的随机的值。这是因为t1没有初始化,而编译器读取了一个内存中的值,所以声明枚举
变量一定要初始化。

       从这里可以看出,dev-c++标准支持最好,vc++2005mingw有编译器自身对枚举变量初始化,变量值不一定,所以最好手工进行初始化。
       C++C很不同,C++已经有全部类化的倾向。根据各个编译器结果可以看出,在编译的时候,自动生成了默认构造函数,VC2005Dev-c++MinGW
都生成了两个构造函数,分别为
tag()tag(int),但是它们各自的实现不同。
    总结一下:用
tag()初始化时,不管one等于1还是0,结果都是0,用tag(int)时,结果为实参的值,声明一个tag变量却不初始化时,VC调用的是tag(int),
Dev-c++什么都没有调用,MinGW调用的是tag()


阅读(1532) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~