C++四种case的详细介绍小结
在C++中,switch语句可以使用四种语句类型,用于匹配不同的情况(case)。这四种语句类型是:
- case表达式常量
- case枚举常量
- case
constexpr
函数 - 不带表达式的
case
下面我们来一一介绍。
1. case表达式常量
这种情况下,case后面直接跟一个常量表达式,如下所示:
switch (n) {
case 1:
// do something
break;
case 2:
// do something
break;
default:
// do something
}
在这个例子中,case语句后面跟的是1和2,这两个数字是常量表达式。如果n的值为1,程序将执行第一个case
之后的代码,如果n的值为2,程序将执行第二个case
之后的代码。
需要注意的是,case
后的常量表达式必须是整数类型(int, char, enum等),否则会报错。
2. case枚举常量
如果枚举类型中的成员在switch语句中被使用,则可以使用枚举常量来匹配不同情况,如下所示:
enum Color{red, blue, green};
switch (c) {
case Color::red:
// do something
break;
case Color::blue:
// do something
break;
case Color::green:
// do something
break;
default:
// do something
}
在这个例子中,case后面跟的是枚举成员Color::red
, Color::blue
, 和Color::green
。如果c
的值是Color::red
,程序将执行第一个case
之后的代码,如果c
的值是Color::blue
,程序将执行第二个case
后的代码。
3. case constexpr
函数
在C++11及以后版本中,可以使用constexpr
函数来实现case
语句。constexpr
函数可以在编译时求值,具有常量表达式的特性。示例如下:
constexpr int add(int a, int b) {
return a + b;
}
int main() {
constexpr int num = add(1, 2);
switch (num) {
case 3:
// do something
break;
default:
// do something
}
}
在这个例子中,add
函数使用了constexpr
关键字,表示该函数可以在编译时求值。num
的值是函数add
在编译时求得的常量3,因此可以被用于case
语句。
4. 不带表达式的case
如果case标签没有任何表达式,它被称为不带表达式的case,如下所示:
switch (n) {
case 0:
// do something
break;
case 1:
// do something
break;
case 2:
case 3:
// do something
break;
default:
// do something
}
在这个例子中,第一个和第二个case带有表达式,而第三个case标签并没有表达式。如果n
的值是0,程序将执行第一个case之后的代码,如果n
的值是1,程序将执行第二个case之后的代码,而如果n
的值是2或3,程序将执行第三个case之后的代码。最后,如果n
的值不是上述任何一个值,程序将执行default之后的代码。
示例说明
下面将给出一个有关switch的使用示例:
#include <iostream>
#include <string>
using namespace std;
enum weekdays {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};
string get_weekday(weekdays day) {
switch(day) {
case MONDAY:
return "Monday";
case TUESDAY:
return "Tuesday";
case WEDNESDAY:
return "Wednesday";
case THURSDAY:
return "Thursday";
case FRIDAY:
return "Friday";
case SATURDAY:
return "Saturday";
case SUNDAY:
return "Sunday";
default:
return "";
}
}
int main() {
int day = 1;
weekdays current_day = static_cast<weekdays>(day - 1);
string weekday = get_weekday(current_day);
cout << "Today is " << weekday << endl;
return 0;
}
在这个例子中,我们使用一个枚举类型 weekdays 来表示星期几,然后用一个case
语句对每一天的情况进行匹配,从而返回对应的字符串。在main函数中,我们使用整数1来表示星期一,将其映射为weekdays::MONDAY
,选择通过switch语句来得到对应的星期字符串。
另一个示例:
#include<iostream>
using namespace std;
int main() {
int n = 3;
switch(n % 2) {
case 0:
cout << n << " is even";
break;
case 1:
cout << n << " is odd";
break;
}
return 0;
}
在这个例子中,我们使用n % 2
,一个常量表达式,来表示n
是奇数还是偶数,然后用case
语句来匹配不同的情况。如果n
是偶数,程序将会输出“3 is even”,否则,程序将会输出“3 is odd”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++四种case的详细介绍小结 - Python技术站