使用switch语句的注意事项


目录
  • case后需要手动break
  • switch内的变量定义
    • 变量没有定义在语句块内
    • 变量定义在语句块内
  • 表述多情况时不能用逗号

case后需要手动break

switch(i){
    case 1:
        语句1;
        break;
    case 2:
        语句2;
        break;
    default:
        语句3;
        break;
}

上述代码表示

  • i == 1时执行语句1
  • i == 2时执行语句2
  • 其他情况执行语句3
switch(i){
    case 1:
        语句1;
    case 2:
        语句2;
    default:
        语句3;
        break;
}

如果漏掉break

  • i == 1时执行语句1、2、3
  • i == 2时执行语句2、3
  • 其他情况时执行语句3

switch内的变量定义

变量没有定义在语句块内

  • 变量的作用域是整个switch语句

  • 内部定义的变量只能声明,不能初始化。

image-20220119171404757

假设上述代码合法,则一旦控制流直接跳到false分支,也就同时略过了变量file_name和ival 的初始化过程。此时这两个变量位于作用域之内,跟在false之后的代码试图在尚未初始化的情况下使用它们,这显然是行不通的。因此C++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置。

变量定义在语句块内

  • 变量的作用域是case语句块内
  • 内部定义的变量可以初始化
case ture:
{
    //正确:声明语句位于语句块内部
    string file_name = get_file();
    //..
}
break;
case false:
	if ( file_name.empty()) //错误:file_name不在作用域内
    break;

表述多情况时不能用逗号

switch(i){
    case 1,2,3,4:   //错误写法
        cout<<"i = 1,2,3,4"<

上述程序应该写为

switch(i){
    case 1: //正确写法
    case 2: 
    case 3: 
    case 4:
        cout<<"i = 1,2,3,4"<

也可写为

switch(i){
    case 1: case 2: case 3: case 4: //正确写法
        cout<<"i = 1,2,3,4"<

相关