1  | switch (integer expression)  | 
其中integer-expression必须为结果为整数值的表达式(如int, char,或者enum枚举量)。switch中的case标签只是行标签,而不是选项之间的界限,如果没有明确的break语句,程序将以此执行之后的所有语句。
switch的case中定义变量
如果在某一处一个带有初始值的变量位于作用域之外,在另一处该变量位于作用域之内,则从前一处跳转到后一处的行为是非法的行为。
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 switch (color)
{
case RED:
string std; // error
int val1 = 0; // error
int val2; // right
int val3; val3 = 0; // right
case BLUE:
{
int val4 = 0; // right
cout << val4 << endl;
}
case GREEN:
val2 = 0;
cout << val2 << endl;
}
因为case语句不构成独立的作用域,所以val1, val2都在声明时对标量进行了初始化,如果该代码不允许被跳过,故编译器报错。可以想case BLUE中在case中加入”{}”,将局部变量定义在代码块中。
switch和if
从某种程度上来说,switch/case比if/else效率要高,除非if/else在第一次逻辑判断就为true,当时switch/case需要建立一张跳转表,因此需要一定的空间开销。再有if/else可以进行逻辑判断,但是switch/case就不可以。