我的代码: -
#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编译器。
答案 0 :(得分:2)
您的程序会跳转到第一个匹配的case
。
只有在找不到任何内容时才会跳转到default
。
[C++14: 6.4.2/5]:
执行switch
语句时,将评估其条件并与每个案例常量进行比较。 如果其中一个case常量等于条件的值,则控制将传递给匹配的case标签后面的语句。如果没有case常量匹配条件,并且有{{1 label,control传递给默认标签标记的语句。如果没有大小写匹配且没有default
则不会执行交换机中的任何语句。
每当您发现自己将default
视为“某种switch
声明”时,请立即停止。
据我所知,由于编译器在读取
if
语句时不知道case 10:
,它还必须执行其中的内容。
这不是C ++的工作原理;它(有点)比那更聪明。