zoukankan      html  css  js  c++  java
  • C++11:强类型枚举(enum)

    // C++11之前的enum类型是继承C的,不温不火;
    // C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮
    // 使用过QT 的都知道,早就应该这么做了,用的非常爽!!
    
    // 一、C中enum类型的局限
    // 1、非强类型作用域
    
    enum type1{a, b, c};
    enum type2{a, d, e};
    
    //问题来了,两种枚举类型都有a枚举常量,并且作用域同样,发生了冲突
    
    //2、同意隐式类型转换
    
    if(type1::a == type2::d){;}
    
    //两种不同enum常量比較没有实际意义,可是编译器是先将enum常量转换为int类型后,再比較的,不会报错
    
    // 3、占用存储空间极其符号不确定
    
    enum type3{a=1, b=0xFFFFFFFFFLL};
    cout<<sizeof(type3::a)<<endl;//可能为8,视编译器而定,由其对齐字长决定的
    cout<<type3::b<<endl;//输出大小不定,可能为0
    
    //问题来了,存储大小和符号都有未定的因素
    
    // 二、C++11强类型enum类型
    
    //语法:
    
    enum class type4:type{a, b, c};//加class,具名,指定底层类型type
    enum class type5{a, b, c};//不指定底层类型
    
    //特点及使用方法:
    // 1、强作用域
    
    type4 t = type4::a; //必须指定强类型名称
    type4 p = a;        //错误
    
    //2、不可隐式转换
    
    if(t<type4::b);                   //同一个enum类型比較,能够
    if(t>type5::b);                   //非同一个enum类型,不能隐式转换为int等值,不嗯呢该比較
    if((int)t > (int)type5::b)        //强制类型转换,能够通过
    
    //3、能够指定底层类型
    
    enum class type6:char{a=1, b=2};
    enum class type7:unsigned int{a=0xFFFFFFFF};
    
    //既能够节省空间,又能够指定符号
    
    //三、C++11是兼容并拓展了C enum类型的
    
    enum type8:char{a=1, b=2};
    type8 t =a;
    
    //拓展并兼容C enum类型
    

  • 相关阅读:
    课堂练习——找水王续
    电梯调度设计
    团队冲刺阶段一第五次站立会议
    团队冲刺阶段一第四次站立会议
    团队冲刺阶段一第三次站立会议
    团队冲刺阶段一第二次站立会议
    团队冲刺阶段一第一次站立会议
    《你的灯亮着吗》读书笔记三
    《你的灯亮着吗》读书笔记二
    《你的灯亮着吗》读书笔记一
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4545779.html
Copyright © 2011-2022 走看看