C++11 强类型枚举相关总结
枚举就是定义一个类别,并且穷举统一类别下的个体以供代码使用。
C++98枚举存在的缺陷:
- 无论是具名枚举的名字还是枚举类型中的成员,都是全局范围的,其作用域是全局的。如果在不同的枚举中定义了相同的枚举成员,则会出现重复声明(redeclaration)错误。
enumPUBLIC_COLOR{RED,YELLOW,GREEN}; enumPRIVATE_COLOR{RED,BLACK,PURPLE};//RED重定义 enumPUBLIC_COLOR{WHITE,GRAY}; //PUBLIC_COLOR重定义 intmain(){ intcolor=RED; cout<你可能会想到使用命名空间来封装枚举类型,但是如果其中的某个命名空间漏写了名字则会变成匿名空间,而匿名空间中的所有枚举成员会默认变成全局命名空间下的成员。因此这种方法是不合适的。
- 枚举中的成员被设计为常量数字的别名,因此可以隐式的转换为int类型,但是这在某些时候是不被期望出现的。
- 枚举类型锁占用的空间大小以及符号不确定。
C++11中的强枚举类型语法格式
enumclassenum_name:elem_type{elem1,elem2,...};C++11强枚举类型的优点
- 强作用域,强类型枚举成员的名称不会被输出到其父作用域空间。
enumclassPUBLIC_COLOR{RED,GREEN,BLACK};//ok enumPRIVATE_COLOR{RED,PURPLE,PINK=1};//ok
- 转换限制,强类型枚举成员的值不可以与整形隐式地相互转换。
enumclassPUBLIC_COLOR{RED,GREEN,BLACK}; enumPRIVATE_COLOR{RED,PURPLE,PINK=1}; if(PUBLIC_COLOR::GREEN==1){//errror:未定义可接受的类型转换 cout<<"color1==1"<
- 可以指定底层类型。强类型枚举默认的底层类型为int,但也可以显式地指定底层类型。
enumclassPUBLIC_COLOR:char{RED,GREEN,BLACK}; enumPRIVATE_COLOR:int{RED,PURPLE,PINK}; cout<
- 不可能对不同的枚举类型的枚举值进行比较。但相同枚举值之间如果指定的值相同,那么可以进行比较。
enumclassPUBLIC_COLOR{RED,GREEN,BLACK}; enumPRIVATE_COLOR{RED,PURPLE,PINK=1}; if(PUBLIC_COLOR::GREEN==PRIVATE_COLOR::PURPLE){//errror cout<<"PUBLIC_COLOR::GREEN==PRIVATE_COLOR::PURPLE"<
- 如果想要输出枚举值可以进行强制类型转换
enumclassPUBLIC_COLOR:char{RED,GREEN,BLACK}; enumPRIVATE_COLOR:int{RED,PURPLE,PINK}; cout<(PUBLIC_COLOR::RED)< (PRIVATE_COLOR::PURPLE)< 以上就是C++11强类型枚举相关总结的详细内容,更多关于C++11强类型枚举的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。