c++11 强类型枚举

首先,看下c语言中的枚举,简单理解就是定义一组常量;

定义如下: enum <类型名> {<枚举常量表>};

下面写个简单的demo:

#include <QApplication>
#include <QDebug>

enum color {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //直接当整数使用
    if (BLUE == 1)
        qInfo() << "equel 1";
    //定义枚举变量
    color tempColor;
    tempColor = BLACK;
    qInfo() << tempColor;

    return a.exec();
}

输出如下:

下面如下强类型枚举:

1.主要针对之前的普通枚举的缺陷;

eg:两个枚举类有同名的常量,直接就编译不过;

        enum class Color{RED,BLUE,YELLOR,BLACK,WHITE};
        enum class TrafficLight{RED,YELLOR,GREEN};

2.之前可以直接与整数进行隐式的类型转换,不安全,引入强类型枚举就需要显示转换,而且可以转换成其它类型,eg:double等;

下面还是看demo:

#include <QApplication>
#include <QDebug>

enum class color {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //首先得添加类型作用域前缀了,加上类型名,就可以声明作用域了;而且转换需要显示转换static_cast<int>()
    if (static_cast<int>(color::BLUE) == 1)
        qInfo() << "equel 1";
    //定义枚举变量
    color tempColor;
    tempColor = color::BLACK;
    qInfo() << static_cast<int>(tempColor);

    return a.exec();
}

输出如下:

下面留个问题(switch case case后面是整形表达式,这时怎么被显示转换了),看下面的demo:

#include <QApplication>
#include <QDebug>

// 变量容器分组枚举
enum class emVarGroup
{
    // DB使用
    GROUP_PRG = 1,
    GROUP_SYSTERM,
    GROUP_COMMON,
    GROUP_LIB,
    GROUP_TESTPIN,
    GROUP_DEV,
    GROUP_NET,
    GPOUP_ERR
};

void IsReadBackGroupType(emVarGroup varGroup)
{
    qInfo() << "output: " << static_cast<int>(varGroup);

    switch (varGroup)
    {
    case emVarGroup::GROUP_COMMON:
        qInfo() << "GROUP_COMMON";
        break;
    case emVarGroup::GROUP_PRG:
        qInfo() << "GROUP_PRG";
        break;
    case emVarGroup::GROUP_NET:
        //TODO: 网络变量分组、库变量分组是否打开
    case emVarGroup::GROUP_TESTPIN:
        qInfo() << "GROUP_NET";
        break;
    default:
        break;
    }
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    IsReadBackGroupType(emVarGroup::GROUP_PRG);
    return a.exec();
}

 输出如下:

而switch case是如下解释的:

switch (IntegerExpression)
{
    case ConstantExpression:
        //在这里放置一个或多个语句
    case ConstantExpression:
        //在这里放置一个或多个语句

    //case可被重复多次

    default:
        //在这里放置一个或多个语句
}

此类语句的第一行以单词 switch 开始,后面是括号内的整数表达式 Integer Expression。 这可以是以下两种之一:

  1. 任何一个整型数据类型的变量(包括 char)。
  2. 其值为任何整型数据类型的表达式。

这后面自己消化了,更新到文章中。 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值