C++ “我什么时候可以省去?”;“中断”;在开关回路中?
我刚刚解决了上的第一个练习。我测试了他们版本的switch-loop,它可以工作,但我想知道它没有中断,在这种情况下,这样的代码不应该导致不希望的行为吗?我什么时候可以省去中断 以下是我的版本(也可以正常工作): <>注意,C++不坚持使用<代码>中断<代码>,但通常C++ “我什么时候可以省去?”;“中断”;在开关回路中?,c++,C++,我刚刚解决了上的第一个练习。我测试了他们版本的switch-loop,它可以工作,但我想知道它没有中断,在这种情况下,这样的代码不应该导致不希望的行为吗?我什么时候可以省去中断 以下是我的版本(也可以正常工作): 注意,C++不坚持使用中断,但通常转换> /COD>依赖于它们,排除有用的后续特性。 如果程序控件从未到达break语句,则可以删除break而不会对程序产生影响:在return语句之后的break语句都无法访问,因此可以安全地删除它们 您也不需要一个空的默认标签。如果没有中断,执行流
break
语句,则可以删除break
而不会对程序产生影响:在return
语句之后的break
语句都无法访问,因此可以安全地删除它们
您也不需要一个空的
默认标签。如果没有中断
,执行流程将继续到下一个案例,除非您以其他方式跳转(如返回
ing,在您的案例中)。这就是所谓的失败
这是否是一个bug取决于程序。如果(例如)您希望多个case
s具有相同的操作,则此选项非常有用:
switch (op)
{
case '+':
return add;
break; // these breaks do nothing - we have already returned!
case '-':
return subtract;
break;
case 'x': // fall through to '*'
case '*':
return multiply;
break;
case '/':
return divide;
break;
}
既然你是C++的新手,请考虑:
- 只要代码到达
return
语句,当前函数/方法就会结束并返回指定的值,而不再执行任何代码行。因此,您的break
语句永远无法到达
- 当达到
中断
时,当前的开关
,将结束。并且该流将在其范围之外继续{…}
- 如果在
开关情况下不使用break
,则流程将继续(甚至到下一种情况)
了解开关
在盖子下的作用可能会对您有所帮助
基本上是:
enum command {
add, subtract, multiply, divide, error
};
command foo(char op)
{
switch (op)
{
case '+': {
return add;
break;}
case '-': {
return subtract;
break;}
case '*': {
return multiply;
break;}
case '/': {
return divide;
break;}
default:
break;
}
return error;
}
逻辑上与此相同:
command foo_that_will_give_people_seizures(char op)
{
if (op == '+') goto plus_;
if (op == '-') goto minus_;
if (op == '*') goto mpy_;
if (op == '/') goto div_;
goto break_;
plus_:
return add;
goto break_; // notice how this statement cannot be reached.
minus_:
return subtract;
mpy_:
return multiply;
div_:
return divide;
break_:
;
return error;
}
语句break第一个函数中出现的任何一种情况下的code>相当于第二个函数中出现的goto break
另外,你不会赢得任何朋友写这样的代码。在C++中,人们喜欢假装<>代码> Goto 是一件坏事;p> 您应该知道,在默认值:
(如果默认值是最后一种情况)上应该忽略break,此时代码流基本上到达末尾,不需要获得break
break
的目的就是防止代码在实际情况为真时继续到下一个情况return
但是,返回案例中的给定语句并断开开关
。如果您正在考虑在开关
案例中返回,则可以使用返回foobar,而不是使用中断
代码>它将通过返回您希望返回的任何内容而中断。首先开关
不是一个循环。而且不需要有一个中断返回
语句后的code>语句。这取决于您是否希望失败。如果不需要,则需要中断。如果没有,那么你就没有。阅读break
和return
所做的事情,答案就会变得清晰。不要依赖测试来学习C++。我也建议从C++教程中学习C++,在链接的页面上不存在“开关”这个词。因此,没有办法回答。此外,问题必须是独立的。知道问题是什么所需的所有信息都必须在问题中。因此,让我们去看看其他网站上的代码是离题的
command foo_that_will_give_people_seizures(char op)
{
if (op == '+') goto plus_;
if (op == '-') goto minus_;
if (op == '*') goto mpy_;
if (op == '/') goto div_;
goto break_;
plus_:
return add;
goto break_; // notice how this statement cannot be reached.
minus_:
return subtract;
mpy_:
return multiply;
div_:
return divide;
break_:
;
return error;
}