enum强化

enum类型

enum类型是一个c/c++的基本类型,它基于c,并在c++上继续使用,c++11在此基础上做了个更好的努力

当程序中需要使用特定数值的时候,一般会采用3种方式来实现

  • 宏定义
#define MALE 0
#define Female 1
缺点在于它只是预处理阶段的名字,预处理过程中会将代码中MALE,Female全部做替换0或者1,那么有时候会干扰正常代码
  • 匿名enum
enum {Male, Female};
编译期的名字,会得到编译器的检查,并且相比宏定义,它不会干扰代码
  • 静态常量
const static int Male = 0;
const static int Female = 1;

有缺陷的enum

  • 具名enum类型的名字和成员的名字都是全局可见的
    如果代码中出现两个enum类型,并且有同一个类型名
enum Type{General, Light, Medium, Heavy};
enum Category(General, Pistol, MachineGun, Canon);

Type::General和Category::General都是全局名,会导致编译报错

  • 在对enum变量进行比较时,都会隐式提升到int类型,进行比较
enum Type{General, Light, Medium, Heavy};
enum Category(Pistol, MachineGun, Canon);
if (Type::General < Category::Pistol)
{
    //这种比较是没意义的,但是编译器不会禁止
}

C++11对enum进行了增强

  • 强作用域,强类型枚举成员的名称不会被输出到父作用域空间
  • 转换限制,不会隐式转换int
  • 可以指定底层类型      例如:
enum class Type : char{General, Light};
//新的enum格式写法
//除了wchar_t 不能指定

使用匿名enum的时候,会出现的问题

enum class {General, Light, Medium, Heavy} weapon;
int main()
{
    weapon = General;            //error
    weapon == weapon::General;   //error
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值