首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我们不能在switch中定义一个变量两次?

为什么我们不能在switch中定义一个变量两次?
EN

Stack Overflow用户
提问于 2014-02-25 19:51:26
回答 5查看 7.4K关注 0票数 30

为什么这是非法的:

代码语言:javascript
运行
复制
switch(x) {

case 1:
   int a = 1;
   break;
case 2:
   int a = 2;
   break;
}

看起来这可能是合法的。这是非法的更深层次的原因是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-02-25 19:53:39

如果不使用break语句,那么我们知道将执行以下情况。因此,如果允许在这两种情况下都进行声明,则会导致冲突。例如

代码语言:javascript
运行
复制
switch(x) {

case 1:
   int a = 1;  // i have removed the break;
case 2:
   int a = 2; // now what will happen here :)
   break;
}
票数 42
EN

Stack Overflow用户

发布于 2014-02-25 19:53:38

这里没有任何与switch相关的东西。你不能在同一个作用域中两次声明同一个变量。

这是非法的:

代码语言:javascript
运行
复制
int a = 1;
int a = 2;

现在,让我们假设你想要,实际上,你的case分支作为作用域。那么问题就是你不能在切换之后使用这个变量(在作用域之外)。

票数 8
EN

Stack Overflow用户

发布于 2014-02-25 20:19:07

switch语句是一个代码块。switch语句计算它的表达式,然后执行所有跟在匹配case标签后面的语句。

在本例中,它计算x,并将其与每个常量进行比较,直到找到匹配为止。

但实际上它就像是在说:

代码语言:javascript
运行
复制
for(int i = 0; i < 4; i++) {
    int i = 1;
}

这也不起作用,因为已经定义了i

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22013361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档