我刚刚在learncpp上解决了第一次练习,第7.8章.我测试了他们的开关循环版本并且它可以工作,但我不知道它没有break,在这种情况下这样的代码不应该导致不良行为吗?我break什么时候可以遗漏?
这是我的版本(也正常工作):
switch (op)
{
case '+': {
return add;
break;}
case '-': {
return subtract;
break;}
case '*': {
return multiply;
break;}
case '/': {
return divide;
break;}
default: ;
}
Run Code Online (Sandbox Code Playgroud)
如果没有break,执行流程将继续下一个案例 - 除非你跳到其他方式(例如return,在你的情况下).这被称为堕落.
这是否是一个错误取决于程序.如果(例如)您希望多个cases具有相同的操作,则可能很有用:
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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,C++ 不坚持使用break,但通常switch情况下取决于它们,以消除有用的后续功能。
break如果程序控制从未到达它,您可以删除它而不对您的程序产生任何影响:break语句之后的任何return语句都不可达,因此您可以安全地删除它们。
您也不需要空default标签。