为什么这是非法的:
switch(x) {
case 1:
int a = 1;
break;
case 2:
int a = 2;
break;
}
看起来这可能是合法的。这是非法的更深层次的原因是什么?
发布于 2014-02-25 19:53:39
如果不使用break语句,那么我们知道将执行以下情况。因此,如果允许在这两种情况下都进行声明,则会导致冲突。例如
switch(x) {
case 1:
int a = 1; // i have removed the break;
case 2:
int a = 2; // now what will happen here :)
break;
}
发布于 2014-02-25 19:53:38
这里没有任何与switch
相关的东西。你不能在同一个作用域中两次声明同一个变量。
这是非法的:
int a = 1;
int a = 2;
现在,让我们假设你想要,实际上,你的case分支作为作用域。那么问题就是你不能在切换之后使用这个变量(在作用域之外)。
发布于 2014-02-25 20:19:07
switch语句是一个代码块。switch语句计算它的表达式,然后执行所有跟在匹配case标签后面的语句。
在本例中,它计算x
,并将其与每个常量进行比较,直到找到匹配为止。
但实际上它就像是在说:
for(int i = 0; i < 4; i++) {
int i = 1;
}
这也不起作用,因为已经定义了i
。
https://stackoverflow.com/questions/22013361
复制相似问题