switch - case 中不能定义变量 的解决办法

在case中加上{}括起来,限定一下作用域。

E.g:
 

switch(){

    case: xxx{


    break;

     }

}

知乎讨论https://www.zhihu.com/question/23051685

1)不能跳过的不是变量的定义,而是初始化。把int ival改成int ival=0;则不会编译通过;

2) ival是局部变量,作用域是所在的大括号内, 第二个case仍然属于该变量的作用域。另外,变量的定义不是语句,所以无需执行也是全范围有效。这里第一个case的语句虽然没有被执行,但它的变量定义仍然有效。

"最后补充一下,你的声明还可以是一个类的对象,那么这时候这个声明的语句就很可能是一个命令了:调用相应的构造函数。这种情况下,编译器就会告诉你跳过了该做的事情,不能这么写了"

3) 其实这就是变量作用域的问题。变量自定义起在其作用域里始终有效。而除了全局性的外部变量,以及文件域的静态变量,其他的都是语句块限定的,即花括号{}里有效。

4)

Related:

https://www.cnblogs.com/zhebin/archive/2013/05/19/3055308.html

发布了357 篇原创文章 · 获赞 87 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_35865125/article/details/104739997