switch case不能用变量的方式
时间: 2023-10-18 07:57:49 浏览: 187
在C语言中,switch case语句中的case标签只能使用整数常量表达式作为其值,不能使用变量。这是因为switch语句的实现方式是利用跳转表(jump table),将每个case标签的值作为跳转表的索引,直接跳转到对应的代码块。如果使用变量作为case标签的值,那么在编译时无法确定跳转表的大小和内容,因此无法生成有效的代码。如果需要根据变量的值进行条件判断,可以使用if语句来实现。
相关问题
switch case 不能用enum
switch case语句可以用于整型、字符型等基本类型的变量,但是不能用于枚举类型,这是由于枚举类型在C/C++中本质上是整型。因此,在使用switch case语句时,应该使用整型变量或者字符型变量作为条件表达式。如果需要使用枚举类型作为条件表达式,可以使用if else语句来代替switch case语句。
举个例子,如果有如下的枚举类型:
```
enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday };
```
那么,下面的代码是错误的:
```
Weekday day = Monday;
switch (day) {
case Monday:
cout << "Today is Monday" << endl;
break;
case Tuesday:
cout << "Today is Tuesday" << endl;
break;
...
}
```
应该改为如下的代码:
```
Weekday day = Monday;
int iDay = static_cast<int>(day);
switch (iDay) {
case 0:
cout << "Today is Monday" << endl;
break;
case 1:
cout << "Today is Tuesday" << endl;
break;
...
}
```
switch 不能用成员变量吗
在Java中,switch语句的表达式只能是一个整数型(byte、short、char、int)或枚举类型,不能是浮点型、布尔型和字符串类型等其他类型。在Java SE 7及之前的版本中,switch语句的表达式还不能是long类型。因此,如果要在switch语句中使用成员变量,需要将成员变量赋值给一个整数型或枚举类型的局部变量,然后再将局部变量作为switch语句的表达式使用。例如:
```
public class MyClass {
private int status;
public void testSwitch() {
int statusCopy = status; // 将成员变量赋值给局部变量
switch (statusCopy) {
case 0:
// do something
break;
case 1:
// do something
break;
default:
// do something
break;
}
}
}
```
需要注意的是,如果成员变量的值发生改变,对应的局部变量也需要重新赋值。另外,为了防止局部变量被修改,可以使用final修饰符将其声明为常量。