首先,看下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。 这可以是以下两种之一:
- 任何一个整型数据类型的变量(包括 char)。
- 其值为任何整型数据类型的表达式。
这后面自己消化了,更新到文章中。