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

     1 // C++11之前的enum类型是继承C的,不温不火;  
     2 // C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮  
     3 // 使用过QT 的都知道,早就应该这么做了,用的很爽!!  
     4   
     5 // 一、C中enum类型的局限  
     6 // 1、非强类型作用域  
     7   
     8 enum type1{a, b, c};  
     9 enum type2{a, d, e};  
    10   
    11 //问题来了,两种枚举类型都有a枚举常量,而且作用域相同,发生了冲突  
    12   
    13 //2、允许隐式类型转换  
    14   
    15 if(type1::a == type2::d){;}  
    16   
    17 //两种不同enum常量比较没有实际意义,但是编译器是先将enum常量转换为int类型后,再比较的,不会报错  
    18   
    19 // 3、占用存储空间极其符号不确定  
    20   
    21 enum type3{a=1, b=0xFFFFFFFFFLL};  
    22 cout<<sizeof(type3::a)<<endl;//可能为8,视编译器而定,由其对齐字长决定的  
    23 cout<<type3::b<<endl;//输出大小不定,可能为0  
    24   
    25 //问题来了,存储大小和符号都有未定的因素  
    26   
    27 // 二、C++11强类型enum类型  
    28   
    29 //语法:  
    30   
    31 enum class type4:type{a, b, c};//加class,具名,指定底层类型type  
    32 enum class type5{a, b, c};//不指定底层类型  
    33   
    34 //特点及用法:  
    35 // 1、强作用域  
    36   
    37 type4 t = type4::a; //必须指定强类型名称  
    38 type4 p = a;        //错误  
    39   
    40 //2、不可隐式转换  
    41   
    42 if(t<type4::b);                   //同一个enum类型比较,可以  
    43 if(t>type5::b);                   //非同一个enum类型,不能隐式转换为int等值,不嗯呢该比较  
    44 if((int)t > (int)type5::b)        //强制类型转换,可以通过  
    45   
    46 //3、可以指定底层类型  
    47   
    48 enum class type6:char{a=1, b=2};  
    49 enum class type7:unsigned int{a=0xFFFFFFFF};  
    50   
    51 //既可以节省空间,又可以指定符号  
    52   
    53 //三、C++11是兼容并拓展了C enum类型的  
    54   
    55 enum type8:char{a=1, b=2};  
    56 type8 t =a;  
    57   
    58 //拓展并兼容C enum类型 

    FROM : https://blog.csdn.net/hustyangju/article/details/41978973?utm_source=tuicool&utm_medium=referral

  • 相关阅读:
    IPC---信号量
    static的用法
    模拟对话框的实现
    Dom选择器使用与调试记录
    第一个javascript脚本
    javascript基础总汇
    overflow的量两种模式
    固定标签到页面
    固定标签到某个标签
    固定标签(position: fixed)
  • 原文地址:https://www.cnblogs.com/rainbow-xiaojian/p/9062999.html
Copyright © 2011-2022 走看看