switch 语句是 c++ 的开关语言,可以看做是 if 语句的升级版本(多分支选择),其表达式如下:
cpp
switch(表达式){
case 常量表达式1:语句1
case 常量表达式2:语句2
case 常量表达式3:语句3
...
case 常量表达式n:语句n
default: 语句n+1
}
switch 语句有以下要求:
- 整数型分支判断:switch 括号中的表达式只能是整数、字符型或枚举型表达式。case 后面的常量表达式类型与其匹配。
- default 分支:当传入的表达式值与某个 case 后面的常量值相等,就执行此 case 后面的语句,如果所有的 case 语句中表达式都不匹配,就执行 default 语句;若没有 default 语句,则直接退出 switch 语句。
- case 常量表达式:其中的表达式不能重复,如果有任意两个 case 之后的常量表达式值相同,则会编译报错,因为程序不知道当传入的常量为此表达式值时,执行哪条语句。
- 遇到 break 退出:因为 case 语句只起到标号作用,case 于 default 并不能改变控制流程,程序会根据常量表达式执行了相应的 case 语句,然后会继续判断其后的 case 语句,浪费了资源。使用 break 保证在实现要求后直接跳出。
一段简单代码:测试 enum 和 break
cpp
#include <QCoreApplication>
#include <iostream>
using std::cout;
using std::endl;
enum FRUIT {
APPLE = 1,
ORANGE = 2,
PEACH = 4
};
int testSwitch(FRUIT f)
{
switch (f) {
case APPLE:
return 1;
break;
case ORANGE:
return 2;
break;
case PEACH:
return 4;
break;
}
}
int testSwitch01(int i)
{
switch (i) {
case 1:
return 10;
case 2:
return 20;
case 3:
return 30;
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
FRUIT f = ORANGE;
cout<< testSwitch(f) << endl;
cout<< testSwitch01(1) << endl;
return a.exec();
}
运行结果:
cpp
2
10