Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “我什么时候可以省去?”;“中断”;在开关回路中?_C++ - Fatal编程技术网

C++ “我什么时候可以省去?”;“中断”;在开关回路中?

C++ “我什么时候可以省去?”;“中断”;在开关回路中?,c++,C++,我刚刚解决了上的第一个练习。我测试了他们版本的switch-loop,它可以工作,但我想知道它没有中断,在这种情况下,这样的代码不应该导致不希望的行为吗?我什么时候可以省去中断 以下是我的版本(也可以正常工作): 注意,C++不坚持使用中断,但通常转换> /COD>依赖于它们,排除有用的后续特性。 如果程序控件从未到达break语句,则可以删除break而不会对程序产生影响:在return语句之后的break语句都无法访问,因此可以安全地删除它们 您也不需要一个空的默认标签。如果没有中断,执行流

我刚刚解决了上的第一个练习。我测试了他们版本的switch-loop,它可以工作,但我想知道它没有中断,在这种情况下,这样的代码不应该导致不希望的行为吗?我什么时候可以省去中断

以下是我的版本(也可以正常工作):

<>注意,C++不坚持使用<代码>中断<代码>,但通常转换> /COD>依赖于它们,排除有用的后续特性。 如果程序控件从未到达
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相当于第二个函数中出现的
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;
}