执行默认值:在C ++中的switch-case选择语句中

时间:2018-02-16 20:28:43

标签: c++

我的代码: -

#include <iostream>

using namespace std;

int main()
{
    int b=10;
    switch(b)
    {
    case 40:
        cout<<"no";
    default:
        cout<<"yes";
    case 10:
        cout<<"done";
    }
    return 0;
}

我只是试验我的代码并尝试了这个场景。我原以为输出是: -

  

yesdone

但输出是: -

  

完成

据我所知,由于编译器在读取case 10:语句时并不知道default:,因此它还必须执行其中的内容。

我的问题: -

i)编译器执行default:的情况是什么时候,为什么输出结果是

  

完成

而不是

  

yesdone

感谢您的帮助。

P.S:我正在使用Code :: Blocks和GCC编译器。

1 个答案:

答案 0 :(得分:2)

您的程序会跳转到第一个匹配的case

只有在找不到任何内容时才会跳转到default

  

[C++14: 6.4.2/5]:执行switch语句时,将评估其条件并与每个案例常量进行比较。 如果其中一个case常量等于条件的值,则控制将传递给匹配的case标签后面的语句。如果没有case常量匹配条件,并且有{{1 label,control传递给默认标签标记的语句。如果没有大小写匹配且没有default则不会执行交换机中的任何语句。

每当您发现自己将default视为“某种switch声明”时,请立即停止。

  

据我所知,由于编译器在读取if语句时不知道case 10:,它还必须执行其中的内容。

这不是C ++的工作原理;它(有点)比那更聪明。